以下是我使用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会因多种期望而引发异常。