Chr*_*ris 11 lambda unit-testing objective-c objective-c-blocks
我有一个函数(内部使用ASIHTTPRequest),它调用一个结果块:
[Http get:@"http://api.geonames.org/postalCodeLookupJSON"
   params:params cacheMins:0 complete:^(NSDictionary *response, BOOL success) {
       STAssertTrue(success, @"JSON retrieved OK");
       STFail(@"blah");
}];
Run Code Online (Sandbox Code Playgroud)
我想测试上面的内容,但似乎测试没有被调用.
如何确保测试等到块被调用?
-编辑-
当然我不建议在gui线程的主应用程序中执行此操作,在这种特殊情况下,它仅用于单元测试.
找到了解决方案:
例如:
__block int done=0;
[Http get:@"http://api.geonames.org/postalCodeLookupJSON"
   params:params cacheMins:0 complete:^(NSDictionary *response, BOOL success) {
       STAssertTrue(success, @"JSON retrieved OK");
       NSArray *postalcodes = [response objectForKey:@"postalcodes"];
       NSDictionary *first = [postalcodes objectAtIndex:0];
       NSString *adminName1 = [first objectForKey:@"adminName1"];
       STAssertTrue([adminName1 isEqualToString:@"New South Wales"], @"NSW");
       done=1;
}];
// https://stackoverflow.com/questions/3615939/wait-for-code-to-finish-execution
while (!done) {
    // This executes another run loop.
    [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
    // Sleep 1/100th sec
    usleep(10000);
}
Run Code Online (Sandbox Code Playgroud)