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)
| 归档时间: |
|
| 查看次数: |
1646 次 |
| 最近记录: |