如何编写异步接收nsnotification的单元测试?
How write unit test for receiving nsnotification asynchronous?
我用完成处理程序调用 rest web 服务,如果成功我发送 NSNotification。
问题是如何编写单元测试来断言成功时发送通知。
如有任何帮助,我们将不胜感激。
您可以为通知添加期望:
expectationForNotification("BlaBlaNotification", object: nil) { (notification) -> Bool in
// call the method that fetches the data
sut.fetchData()
waitForExpectationsWithTimeout(5, handler: nil)
但我个人认为这是两个测试。一种用于获取数据(使用存根测试),一种用于发送通知。
这是我测试通知的方式:
func testDataFetched() {
weak var expectation = self.expectation(description: "testDataFetched")
//set the notification name to whatever you called it
NotificationCenter.default.addObserver(forName: NSNotification.Name("dataWasFetched"), object: nil, queue: nil) { notification in
//if we got here, it means we got our notification within the timeout limit
//optional: verify userInfo in the notification if it has any
//call fulfill and your test will succeed; otherwise it will fail
expectation?.fulfill()
}
//call your data fetch here
sut.fetchData()
//you must call waitForExpectations or your test will 'succeed'
// before the notification can be received!
// also, set the timeout long enough for your data fetch to complete
waitForExpectations(timeout: 1.0, handler: nil)
}
我用完成处理程序调用 rest web 服务,如果成功我发送 NSNotification。
问题是如何编写单元测试来断言成功时发送通知。
如有任何帮助,我们将不胜感激。
您可以为通知添加期望:
expectationForNotification("BlaBlaNotification", object: nil) { (notification) -> Bool in
// call the method that fetches the data
sut.fetchData()
waitForExpectationsWithTimeout(5, handler: nil)
但我个人认为这是两个测试。一种用于获取数据(使用存根测试),一种用于发送通知。
这是我测试通知的方式:
func testDataFetched() {
weak var expectation = self.expectation(description: "testDataFetched")
//set the notification name to whatever you called it
NotificationCenter.default.addObserver(forName: NSNotification.Name("dataWasFetched"), object: nil, queue: nil) { notification in
//if we got here, it means we got our notification within the timeout limit
//optional: verify userInfo in the notification if it has any
//call fulfill and your test will succeed; otherwise it will fail
expectation?.fulfill()
}
//call your data fetch here
sut.fetchData()
//you must call waitForExpectations or your test will 'succeed'
// before the notification can be received!
// also, set the timeout long enough for your data fetch to complete
waitForExpectations(timeout: 1.0, handler: nil)
}