您的更新暗示在 tearDown 线程中休眠来解决它,如果您正在执行诸如网络或后台处理之类的事情,一个方便的技巧是设置一个标志并确保它被清除(如果没有则抛出错误)。清除响应代码中的标志。
下面的拆解和测试设置了一个两秒的计时器(嗯,它等待 250 毫秒八次)。
- (void)tearDown {
[super tearDown];
while (isProcessing > 0) {
LogTrace(@"Polling...");
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:.25]];
isProcessing--;
if(isProcessing == 0) {
XCTFail(@"Network loop expired while awaiting response");
}
}
LogTrace(@"Finished Polling");
}
-(void)testARandomRequest {
isProcessing = 8;
NSDictionary *parameters = @{@"code": @"54321"};
[manager doAFNetworkPatch:@"restApi/1" andParameters:parameters andPredicate:^(NSURLResponse *response, NSError *error) {
NSLog(@"Response received");
isProcessing = 0;
}];
}