在 XCTests (UITests) 中测试通知

Testing notifications in XCTests (UITests)

我在通知测试方面遇到了一些问题。我在全新且干净的项目中重现了这个案例,但仍然无法在测试中收到我的通知。

viewDidLoad() 方法中,我 post 我的通知是这样的:

DispatchQueue.main.asyncAfter(deadline: .now() + 3) {
    NotificationCenter.default.post(name: Notification.Name("Test"), object: nil, userInfo: nil);
}

在我的测试中,我试图抓住它:

var app: XCUIApplication!        
override func setUp() {
     super.setUp()
     continueAfterFailure = false
     app = XCUIApplication()
     app.launch()
}
func testExample() {
     expectation(forNotification: Notification.Name("Test"), object: nil) { notification in
         return true
     }
     waitForExpectations(timeout: 10, handler: nil)
}  

但是不行。

我在 Whosebug 上找到了一些信息,我应该满足期望,但我的处理程序没有被触发这样做。

简单的代码,简单的测试但它不起作用 - 真令人沮丧。

顺便说一句,我在 Xcode 9.4.1 中使用 UITests,发现使用 UnitTests 一切正常。可能的错误?

您将无法在 UI 测试中测试 Notifications 的接收,因为 UI 测试 运行ner 在 运行将 运行时间分配给您的应用。

要直接测试 Notification 是使用 expectation(forNotification:object:handler:) 发布的,您需要使用单元测试。如果您想 UI 测试这种情况,您将需要测试通知的 结果 是否显示在屏幕上,因此意味着通知已发送。如果发布的通知没有可见结果,您将无法UI 对其进行测试。