这是我在 Xcode 中使用 XCTestExpectation 测试的异步函数。
-(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 会引发多个期望的异常。