Objective c 如何使用OCMock或OCMockito验证对NSURLProtocol mock的方法调用?

Objective c 如何使用OCMock或OCMockito验证对NSURLProtocol mock的方法调用?,objective-c,ocmock,nsurlprotocol,ocmockito,Objective C,Ocmock,Nsurlprotocol,Ocmockito,我想测试一个发出GET请求的方法 下面是一个人为的例子: - (void)GET:(NSString *)URLString; 与其担心此方法的实现细节(例如模拟、设置期望值,然后验证依赖关系),我更希望能够测试是否发出了GET请求 我相信我可以做到这一点,但我的尝试迄今为止都没有成功 例如,使用OCMock: id mockURLProtocol = (NSURLProtocol *)[OCMockObject mockForClass:[NSURLProtocol class]]; [NS

我想测试一个发出GET请求的方法

下面是一个人为的例子:

- (void)GET:(NSString *)URLString;
与其担心此方法的实现细节(例如模拟、设置期望值,然后验证依赖关系),我更希望能够测试是否发出了GET请求

我相信我可以做到这一点,但我的尝试迄今为止都没有成功

例如,使用OCMock:

id mockURLProtocol = (NSURLProtocol *)[OCMockObject mockForClass:[NSURLProtocol class]];
[NSURLProtocol registerClass:mockURLProtocol];

[[mockURLProtocol expect] canInitWithRequest:[OCMArg any]];

[MYClass GET:@"test"];

[mockURLProtocol verify];
[mockURLProtocol stopMocking];
[NSURLProtocol unregisterClass:mockURLProtocol];
上述测试失败,因为从未调用canInitWithRequest


我如何设置对NSURLProtocol的期望值以验证是否发出了请求?

模仿NSURLProtocol对我来说没有意义。NSURLProtocol用于测试,以创建对特定请求的固定响应,无需对其进行模拟—您不想测试系统如何与之交互。使用NSURLConnectionLegate协议,如果您想使用此方法而不是直接测试NSURLConnectionLegate实现的纯单元测试,它可能对您很有用。

要澄清,我意识到以上只是一个起点,我需要做更多的工作来验证我所期望的请求是否真的发出了。你的类的GET方法的代码是什么?它目前使用AFNetworking,但重点不是真正关心方法内部发生了什么。这里您正在验证GET方法是否会调用canInitWithRequest-我不清楚它是否会-该方法可以做任何事情。如果您想知道是否发出了GET请求,为什么不部分模拟您自己的类实例并期望GET呢?在这种情况下,测试中的方法是GET。这就是我要调用的方法。如果发出GET请求并且注册了我的NSURLProtocol mock,则应调用canInitWithRequest。