XCTestExpectation を使用して非同期呼び出しをテストしています。
次のコードは、指定された 1 秒のタイムアウトの前に completionHandler が実行されると機能します (テストは成功します)。
func test__async_call() {
// prepare
let sut = ClassToTest()
let expectation: XCTestExpectation = self.expectationWithDescription(nil)
// test
sut.methodToTestWithCompletionHandler() { () -> () in
expectation.fulfill()
}
// verify
self.waitForExpectationsWithTimeout(1, handler: nil)
}
ただし、completionHandler が呼び出されず、期待が満たされない場合、waitForExpectationsWithTimeout を呼び出したときにテストが失敗する代わりに、EXC_BAD_ACCESS が返されます。これは、テスト スイート全体の結果を確認することが不可能になるため、あまり便利ではありません。
これを回避し、通常のテストの失敗を得るにはどうすればよいですか?