一个类,可以帮助您创建测试异步方法的单元测试。您需要它来对从网络请求数据、使用位置、相机等任何类进行单元测试。
从https://github.com/icanzilb/MTTestSemaphore克隆此存储库或将其作为zip文件下载。
将MTTestSemaphore
子文件夹的内容包含到您的项目中 - 请确保将MTTestSemaphore
类包含在您的测试目标中。
使用[[MTTestSemaphore semaphore] waitForKey: @"myAwesomeKey"]
在给定位置停止代码执行并等待(即等待您的异步代码执行完毕)
使用[[MTTestSemaphore semaphore] lift: @"myAwesomeKey"]
在同一密钥停止的地方取消阻塞程序执行。
以下是一个完整示例,展示如何在测试用例中执行异步调用并等待其执行
-(void)testLocationAsyncNoComments
{
NSString* sempahoreKey = @"testLocationAsync1";
CLGeocoder* gc = [[CLGeocoder alloc] init];
[gc geocodeAddressString:@"Triq Sant' Orsla, Valletta, Malta"
completionHandler:^(NSArray *placemarks, NSError *error) {
NSAssert(placemarks.count>0, @"the geocoder returned 0 results");
[[MTTestSemaphor semaphore] lift: sempahoreKey];
}];
[[MTTestSemaphor semaphore] waitForKey: sempahoreKey];
}
下载并运行此存储库中的项目/测试项目,以查看MTTestSemaphore的使用方法