我有一个在后台运行并在完成后更新主线程UI的函数。我注意到当代码到达调用主线程时,单元测试失败。我该如何纠正这个问题?
例如: 注意:长图示项目中的伪逻辑,而不是精确的代码
在主代码中:
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)
}
}
看起来可能存在死锁问题,但我不确定如何解决它。
getResponse()
的声明/实现。 - shallowThought