繁体   English   中英

OCMock和AFHTTPRequestOperationManager

[英]OCMock and AFHTTPRequestOperationManager

我正在尝试使用OCMock为AFNetworking的AFHTTPRequestOperationManager创建一个模拟

这就是我得到的:

id mockRequestManager = OCMClassMock([AFHTTPRequestOperationManager class]);
OCMStub([mockRequestManager manager]).andReturn(mockRequestManager);
[myObject methodThatUsesAFHTTPRequestOperationManager];

我之前已经为其他单例(例如[NSNotificationCenter defaultCenter] )完成了此操作,但是使用AFHTTPRequestOperationManager时,当从[myObject methodThatUsesAFHTTPRequestOperationManager] [AFHTTPRequestOperationManager manager]调用[AFHTTPRequestOperationManager manager]时,我并没有取回[AFHTTPRequestOperationManager manager]对象。 我总是找回AFHTTPRequestOperationManager实例对象。

我想念什么吗? AFHTTPRequestOperationManager是否有一些实现细节,阻止了它的正常运行?

编辑

因此,在查看完AFHTTPRequestOperationManager代码后,事实证明它实际上不是单例,只是一个返回新AFHTTPRequestOperationManager对象的类方法。 但是,我仍然不明白为什么对类方法进行存根不返回我的模拟对象而不是创建一个新的模拟对象。

如你所说不是单身。 您可以注入它。 这个答案

使用注入优先于单例。 如果您不想注入[NSUserDefaults standardUserDefaults] [NSNotificationCenter defaultCenter]之类的典型对象,您可以做的而不是[NSUserDefaults standardUserDefaults]和存根共享实例访问器,只需在测试中使用真实对象即可。 例如,您可以在测试中侦听该通知,而不是测试您要发布模拟defaulCenter的特定通知。 我更喜欢此解决方案,因为它避免使用模拟,并且可以说这是更可靠的,因为您正在与真实的通知中心一起测试对象。 有人可能会说该测试将是一个集成测试,但在这种情况下,IMO不值得做出任何区分。

关于存根共享实例访问器,我不习惯于新的OCMock语法,但是这应该没有问题,请查看如何使用OCMock存根类方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM