XCTestExpectation を使用して Xcode でテストしている非同期関数を次に示します。
-(void)syncData:(void (^)(NSString *type, NSError *error))completionBlock {
[self fetchAWithCompletionBlock:^ {
completionBlock(@"a",nil);
}];
[self fetchBWithCompletionBlock:^ {
completionBlock(@"b",nil);
}];
[self fetchCWithCompletionBlock:^ {
completionBlock(@"c",nil);
}];
}
コードをテストするために、各非同期呼び出しが完了するまで待機する 3 つの期待値を作成しました。
[appDelegate syncData:^(NSString *type, NSError *error) {
if ([type isEqualToString:@"a"]) {
[expectation1 fulfill];
}
if ([type isEqualToString:@"b"]) {
[expectation2 fulfill];
}
if ([type isEqualToString:@"c"]) {
[expectation3 fulfill];
}
}];
デフォルトを使用して期待が満たされるのを待つとき
[self waitForExpectationsWithTimeout:60 handler:^(NSError *error) {}
しかし、これによりSIGABRT
次のエラーが発生します*** Assertion failure in -[XCTestExpectation fulfill], /Library/Caches/com.apple.xbs/Sources/XCTest_Sim/XCTest-9530/XCTestFramework/Classes/XCTestCase+AsynchronousTesting.m:450
を使用して関数を正常にテストしましたが、それは機能しdispatch_groups
ます。しかし、XCTestExpectation が複数の期待に対して例外を発生させている理由を理解できませんでした。