Ios 嘲弄期望和中央大调度
我有一个简单的管理器对象,使用kiwi中的mock,我想检查当我调用Ios 嘲弄期望和中央大调度,ios,grand-central-dispatch,kiwi,Ios,Grand Central Dispatch,Kiwi,我有一个简单的管理器对象,使用kiwi中的mock,我想检查当我调用[aPOIManager fetchNear:location]时,它是否在其下载程序上调用downloadpoisnar:completionBlock: 一切都很顺利,直到我决定把电话发送到中央调度中心的下载程序 由于调用是异步的,测试现在失败了。 Kiwi具有异步检查某些值的功能,但不检查异步调用 以下是我测试的一部分: it(@"should call the proximity downloader", ^{
[aPOIManager fetchNear:location]
时,它是否在其下载程序上调用downloadpoisnar:completionBlock:
一切都很顺利,直到我决定把电话发送到中央调度中心的下载程序
由于调用是异步的,测试现在失败了。
Kiwi具有异步检查某些值的功能,但不检查异步调用
以下是我测试的一部分:
it(@"should call the proximity downloader", ^{
CLLocation *location = [[CLLocation alloc] initWithLatitude:1.0f longitude:1.0f];
id<RMProximityDownloader> mockDownloader =
[KWMock mockForProtocol:@protocol(RMProximityDownloader)];
[[(NSObject*)mockDownloader should] receive:@selector(downloadPOIsNear:completionBlock:)];
RMPOIManager *aPOIManager = [[RMPOIManager alloc] initWithDownloader:mockDownloader];
[aPOIManager fetchNear:location];
});
它(@“应该调用接近下载程序”^{
CLLocation*location=[[CLLocation alloc]initWithLatitude:1.0f经度:1.0f];
身份证下载程序=
[KWMock mockForProtocol:@protocol(RMProximityDownloader)];
[[(NSObject*)mockDownloader应该]接收:@selector(downloadPOIsNear:completionBlock:)];
rmpoimager*aPOIManager=[[rmpoimager alloc]initWithDownloader:mockDownloader];
[aPOIManager fetchNear:location];
});
试试这个:
[[(NSObject*)mockDownloader shouldEventually] receive:@selector(downloadPOIsNear:completionBlock:)];
如果需要,您还可以使用
shouldentialybeforemingOutafter(秒)
。FYI,如果您将模拟下载程序声明为id
,则无需强制转换到NSObject*
。在文档中: