2014-01-27 39 views
1

我已经使用XCode 5做了一个iOS应用程序,现在我想为它做单元测试,我已经为登录服务编写了测试用例,但事情是请求正在形成但没有回应,当我们正常运行应用程序时,我们正在收到适当的响应,我已经用OCUnit测试了相同的服务,并且没有遇到任何问题。在使用XCTest测试Web服务时,我们必须注意哪些具体的事情xcode 5 xctest测试异步登录网络服务

+0

如果你不提供任何代码,很难有人能够帮助你。 – nKn

+0

战利品进入这...这可以是有益的https://www.bignerdranch.com/blog/asynchronous-testing-with-xcode-6/ –

回答

0

hfossli宏观经济是好的,但输入不添加到runloo p故亦return immediately(挑起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]]; 
    } 
} 
+0

我在这里使用while循环版本,但如果你是我的任何东西并且在你的心底痛恨while循环时,你知道如何用“for”一个来做:)(如果你没有,for(; waitingForBlock;){...}) – GiovaMaster