如何使用OCMock或OCMockito验证对NSURLProtocol模拟的方法调用?

时间:2014-01-30 16:00:23

标签: objective-c ocmock nsurlprotocol ocmockito

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

这是一个人为的例子:

- (void)GET:(NSString *)URLString;

我不想担心此方法的实现细节(例如模拟,设置期望,然后验证依赖关系),我宁愿只能测试是否发出了GET请求。

我相信我可以用NSURLProtocol做到这一点,但到目前为止我的尝试都没有成功。

例如,使用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的期望以验证是否正在发出请求?

1 个答案:

答案 0 :(得分:0)

模拟NSURLProtocol对我来说没有意义。 NSURLProtocol用于测试以创建对某些请求的预设响应,不需要模拟它(您不想测试系统如何与之交互)。 This project使用NSURLProtocol,如果您想使用此方法而不是直接测试NSURLConnectionDelegate实现的纯单元测试,它可能对您有用。