Ios 嘲弄期望和中央大调度

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", ^{

我有一个简单的管理器对象,使用kiwi中的mock,我想检查当我调用
[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*
。在文档中: