私はバックグラウンドで実行される関数を持っており、完了したらメインスレッドのUIを更新します。コードがメインスレッドへの呼び出しに達すると、ユニットテストが失敗することに気付きました。これをどうやって修正するのですか?ユニットテストでMainThreadを実行する
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)
}
}
}
とユニットテスト
中:長い擬似プロジェクト内のロジックと ない正確なコードメインコードでを示している:例えば NBについては
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) } }
これは潜在的なデッドロックのようですが、私はcertaではありませんどのようにそれを回避するかについて。
「getResponse()」の宣言/実装を示してください。 – shallowThought
@shallowThoughtはコードにマイナーな変更を加えました。意図した疑似ロジックを描くのは実際のプロジェクトの正確なコードではありません – DrPatience
ユニットテストまたはUIテストについてお話ししていますか? – shallowThought