XCTest 中的测试通知(UI 测试)
Posted
技术标签:
【中文标题】XCTest 中的测试通知(UI 测试)【英文标题】:Testing notifications in XCTests (UITests) 【发布时间】:2018-09-07 07:18:44 【问题描述】:我在通知测试方面遇到了一些问题。我在全新且干净的项目中复制了该案例,但仍然无法在测试中收到我的通知。
在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)
但它不起作用。
我在*** 上找到了一些我应该满足期望的信息,但我的处理程序没有被触发这样做。
简单的代码,简单的测试,但它不起作用 - 真令人沮丧。
顺便说一句,我在 Xcode 9.4.1 中使用 UITests,发现 UnitTests 一切正常。可能的错误?
【问题讨论】:
@Ashley Mills 为什么在 2 秒后标记为重复?我已经在我的示例代码中实现了链接解决方案 请发布您的整个测试代码,包括您实例化视图控制器的位。 @Oletha 谢谢回复。我正在使用 UITests,所以手动控制器实例化不是我的情况。我已经更新了我的测试 sn-p 以包含所有与测试相关的代码 【参考方案1】:您将无法在 UI 测试中测试 Notification
s 的接收,因为 UI 测试运行器在您的应用的单独运行时中运行。
要使用expectation(forNotification:object:handler:)
直接测试Notification
是否发布,您需要使用单元测试。如果您想对该场景进行 UI 测试,您将需要测试通知在屏幕上显示的结果,从而暗示通知已发送。如果发布的通知没有可见的结果,您将无法对其进行 UI 测试。
【讨论】:
我设法通过 UITest 中的输出来测试通知的一部分,并通过在 UnitTests 中收听通知来测试其余部分。这不是完美的解决方案,但已经足够好了。感谢@Oletha 节省了我头上的头发:)以上是关于XCTest 中的测试通知(UI 测试)的主要内容,如果未能解决你的问题,请参考以下文章