在XCTests(UITests)中测试通知

时间:2018-09-07 07:18:45

标签: ios swift xcode xctest

我在通知测试方面遇到了一些问题。我在全新的整洁项目中复制了此案例,但仍无法在测试中收到通知。

viewDidLoad()方法中,我这样发布通知:

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)
}  

但是它不起作用。

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

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

顺便说一句,我在Xcode 9.4.1中使用UITests,并且发现使用UnitTests都可以正常工作。可能的错误?

1 个答案:

答案 0 :(得分:0)

您将无法在UI测试中测试Notification的接收情况,因为UI测试运行程序在与应用程序不同的运行时中运行。

要直接测试是否使用Notification发布了expectation(forNotification:object:handler:),则需要使用单元测试。如果要UI测试这种情况,则需要测试屏幕上显示的通知的<结果>结果,因此暗示通知已发送。如果没有明显的发布结果,您将无法进行UI测试。