xcode 5 xctest测试异步登录Web服务

时间:2014-01-27 13:37:52

标签: ios7 xcode5 xctest

我使用XCode 5创建了一个iOS应用程序,现在我想为它进行单元测试,我已经为登录服务编写了测试用例,但问题是请求正在形成但没有响应即将到来以及我们运行时应用程序通常我们正在接收正确的响应,我已经使用OCUnit测试了相同的服务并且没有遇到任何问题。在使用XCTest测试Web服务时我们必须注意哪些具体事项

2 个答案:

答案 0 :(得分:0)

使用https://github.com/hfossli/AGAsyncTestHelper,您可以写

- (void)testAsyncBlockCallback
{
    __block BOOL jobDone = NO;

    [Manager doSomeOperationOnDone:^(id data) {
        jobDone = YES; 
    }];

    WAIT_WHILE(!jobDone, 2.0);
}

答案 1 :(得分:0)

hfossli的宏很好但是没有向runloop添加输入因此使它成为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]];
    }
}