1

这是我在 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 会引发多个期望的异常。

4

0 回答 0