Ios7 xcode 5 xctest测试异步登录web服务
我已经使用XCode 5制作了一个iOS应用程序,现在我想对它进行单元测试,我已经为登录服务编写了测试用例,但问题是请求正在正确形成,但没有响应,当我们正常运行应用程序时,我们收到了正确的响应,我已经用OCUnit测试了同一个服务,没有遇到任何问题。在用XTest测试web服务时,我们有什么特别的事情需要注意吗Ios7 xcode 5 xctest测试异步登录web服务,ios7,xcode5,xctest,Ios7,Xcode5,Xctest,我已经使用XCode 5制作了一个iOS应用程序,现在我想对它进行单元测试,我已经为登录服务编写了测试用例,但问题是请求正在正确形成,但没有响应,当我们正常运行应用程序时,我们收到了正确的响应,我已经用OCUnit测试了同一个服务,没有遇到任何问题。在用XTest测试web服务时,我们有什么特别的事情需要注意吗 - (void)testAsyncBlockCallback { __block BOOL jobDone = NO; [Manager doSomeOperation
- (void)testAsyncBlockCallback
{
__block BOOL jobDone = NO;
[Manager doSomeOperationOnDone:^(id data) {
jobDone = YES;
}];
WAIT_WHILE(!jobDone, 2.0);
}
hfossli的宏很好,但没有向runloop添加输入,因此导致它(据我所知,这段代码会引起CPU的麻烦),下面是修复它的代码:
NSRunLoop *runLoop = [NSRunLoop currentRunLoop];
[runLoop addPort:[NSMachPort port] forMode:NSDefaultRunLoopMode];
wile(waitingForBlock){
[runLoop runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1f]];
}
简单完整的示例用法和一个假设的AFNetworking调用:
- (void)testSync{
__block BOOL waitingForBlock = YES;
[self.manager POST:k_WSERVICE_SYNC_ENDPOINT
parameters:nil
success:^(AFHTTPRequestOperation *operation, id responseObject) {
XCTAssertTrue(responseObject != nil, @"Sync: Got empty response, should have received something");
waitingForBlock = NO;
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
XCTFail(@"Sync: Failed to connet with error %@",error);
waitingForBlock = NO;
}];
NSRunLoop *runLoop = [NSRunLoop currentRunLoop];
[runLoop addPort:[NSMachPort port] forMode:NSDefaultRunLoopMode];
while(waitingForBlock){
[runLoop runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1f]];
}
}
如果你不提供任何代码,很难有人能帮你。。。我在这里使用了while循环版本,这可能会很有帮助,但是如果你和我一样,从心底恨while循环,你知道如何使用“for”一词:)(如果你没有:for(;waitingForBlock;){…})