在 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 测试中测试 Notification
s 的接收,因为 UI 测试 运行ner 在 运行将 运行时间分配给您的应用。
要直接测试 Notification
是使用 expectation(forNotification:object:handler:)
发布的,您需要使用单元测试。如果您想 UI 测试这种情况,您将需要测试通知的 结果 是否显示在屏幕上,因此意味着通知已发送。如果发布的通知没有可见结果,您将无法UI 对其进行测试。
我在通知测试方面遇到了一些问题。我在全新且干净的项目中重现了这个案例,但仍然无法在测试中收到我的通知。
在 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 测试中测试 Notification
s 的接收,因为 UI 测试 运行ner 在 运行将 运行时间分配给您的应用。
要直接测试 Notification
是使用 expectation(forNotification:object:handler:)
发布的,您需要使用单元测试。如果您想 UI 测试这种情况,您将需要测试通知的 结果 是否显示在屏幕上,因此意味着通知已发送。如果发布的通知没有可见结果,您将无法UI 对其进行测试。