は、次のユニット・テストを考えてみましょう:ユニットテストでのXCTestExpectationのメソッド呼び出しのタイミング/配置が正しいか?
- (void)testSample {
XCTestExpectation *expectation = [self expectationWithDescription:@"Sample"];
[self.manager loadAllSuccess:^{
[expectation fulfill];
NSArray *data = [self.manager dataForIndex:0];
// Correct count of data is 10, not 44 - this should fail.
XCTAssertEqual(44, data.count);
} failure:^(NSError *error) {
[expectation fulfill];
XCTFail(@"Error encountered");
}];
[self waitForExpectationsWithTimeout:60 handler:nil];
}
私は知ら失敗ケースでいくつかの問題に直面しています。データ配列に10個のアイテムしか存在しないにもかかわらず、テストは正常に終了します。
私はブロックの下部に[expectation fulfill]
電話を入れた場合、私は値が10
であることを修正するまで、XCTAssertEqual(44, data.count)
メソッドを呼び出した後、テストが期待通りに動作し、失敗したが、これは既知の問題ですか?私は、非同期 callback-の終わりに)
非同期コールバックの最後に必ずfulfill()を呼び出します。これにより、テストが完了する前に実行ループが終了する可能性のある競合状態を前もって設定できます。テストに複数の期待値がある場合、各期待値がwaitForExpectationsWithTimeout()で指定されたタイムアウト以内にfulfill()を実行しないかぎり、テストは成功しません。 http://nshipster.com/xctestcase/でこれを見つけました – Zach