多个期望会导致waitForExpectationsWithTimeout崩溃

时间:2016-01-04 09:25:34

标签: ios objective-c xcode asynchronous xctestexpectation

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

0 个答案:

没有答案