我有一个在后台运行的功能,完成后它会更新主线程中的UI。我注意到当代码到达主线程的调用时单元测试失败。我该如何纠正这个?
例如 注意:long表示项目中的伪逻辑,不是确切的代码
在主要代码中:
func getResponse(identifier : String, completion :(success :Bool)->){
// uses identifier to request data via api and on completion:
completion(status: true)
}
testObject.getResponse(wantedValue){(success) in
if status == true {
dispatch_async(dispatch_get_main_queue()){
self.presentViewController(alertController, animated: true, completion: nil)
}
}
}
在单元测试中
func testGetResponse(){
var testObject = TestObject()
var expectation = self.self.expectationWithDescription("Response recieved")
testObject.getResponse(wantedValue){(success) in
expectation.fulfill()
}
self.waitForExpectationsWithTimeout(10) { (error) in
XCTAssertTrue(testViewController.presentedViewController as? CustomViewController)
}
}
这似乎是一个潜在的僵局,但我不确定如何解决它。
答案 0 :(得分:0)
对于未调用异步函数或未正确完成的情况,waitForExpectationsWithTimeout也是回退方法(因此没有调用fulfill()方法)。
尝试检查错误对象。
我建议在进行fullfill()调用之前进行验证。
请参阅以下Swift 3示例代码,了解如何使用fullfill和waitForExpectationsWithTimeout。
func testGetResponse(){
var testObject = TestObject()
var validationExpectation = expectation(description: "Response received")
testObject.getResponse(wantedValue){(success) in
// Do your validation
validationExpectation.fulfill()
// Test succeeded
}
waitForExpectationsWithTimeout(60) { (error) in
if let error = error {
// Test failed
XCTFail("Error: \(error.localizedDescription)")
}
}
}