在 XCTest 中我可以用来expectation(forNotification:)
测试 NSNotificationCenter 发布通知如下:
func testLoginNotification() {
let notificationExpectation = expectation(forNotification: .login, object: nil, handler: nil)
methodPostNotificationLogin()
wait(for: [notificationExpectation], timeout: 2)
}
如何在快速测试中做到这一点?
@Test fun loginNotification() {
#expect()
}
您可以直接在测试代码中等待通知。
#expect
如果您只是想检测通知的存在,则无需执行任何操作。一旦asyncSequence
生成一个元素,next
就会返回一些非零值Notification
。如果您需要更短的时间限制,那就有点棘手了。您可以将上述内容包装在 中
Task
,然后启动另一个Task
任务,等待所需的时间后再取消第一个任务。这里真正的问题是你的测试总是错的(在 XCTest 中)。测试 NSNotificationCenter 毫无意义;那是 Apple 的代码,不是你的,而且你已经知道它的作用了。
您需要测试的是,您的代码是否向通知中心发出了正确的信息—— 您可以在 Swift Testing 中通过模拟通知中心轻松实现这一点。您可能还需要测试当通知到达时您的代码会做什么—— 您也可以在 Swift Testing 中通过模拟通知中心轻松实现这一点。
如果在单元测试期间触发了真正的通知中心,则这是一个重大错误,需要修复。换句话说,这里的通知中心就像网络一样(您也不应该测试网络)。仅测试被测系统,即您的代码。