简化了代码结构,我有一个UIViewController
与viewDidLoad()
,它调用一个方法,使用DispatchQueue.main.async()
等待主线程执行代码。这个测试是否稳健?我可以在单元测试中使用DispatchQueue.main.async()吗?
viewDidLoad() {
method()
}
method() {
...
DispatchQueue.main.async() {
...some code...
}
}
我的测试还需要等待主线程调用XCTAssertEqual之前。
func testSuccessRequest() {
let exp = expectation(description: "labelText")
let vc = ViewController.init()
vc.request = SuccessRequest.init()
vc.loadViewIfNeeded()
DispatchQueue.main.async() {
XCTAssertEqual(vc.label.text, "success")
exp.fulfill()
}
waitForExpectations(timeout: 40, handler: nil)
}
该测试是否健壮?或者我可以在异步之前调用断言代码吗?
嗨,所以你使用了2秒的延迟,对不对?但这不仅仅是一种解决方法吗?我宁愿不必通过设置随机延迟值来减慢测试速度。 – aneuryzm
谢谢。你的解决方案是有效的,在我看来,我可以在处理异步线程时定期使用它。我想知道:这个问题有多普遍?看来你必须想一点。但是UILabel异步更新并不常见?换句话说:你给我的解决方案有多普遍? – aneuryzm
这是GCD函数或KVO不返回回调的常见问题。这是它有用的场景。我真的必须改进我的前期。我们故意拖延的解决方案。 – manismku