OCMock - [NSURLSessionDataTask响应]在iOS 9中无法识别的选择器崩溃

时间:2015-09-08 16:35:05

标签: unit-testing cocoa-touch ios9 ocmock nsurlsessiondatatask

问题

我们在许多单元测试中使用OCMock作为模拟对象。作为我们的代码如何响应服务器响应的测试的一部分,我们创建了一个NSURLSessionDataTask对象,然后尝试在其上使用“response”属性。

情节变粗

在iOS 9之前,测试运行得很好。该属性也可以在iOS 9上的应用程序的正常回调流程中正常工作。

但是,对于iOS 9测试版,测试在运行时因“无法识别的选择器发送到实例”错误而崩溃。该属性存在于框架标题中,并且未在文档中标记为已删除。

此示例代码说明了问题:

NSURLSessionDataTask *task = [[NSURLSessionDataTask alloc] init];

NSLog(@"%@", task.response);

理论

似乎该类的直接实例化不再在运行时提供该属性。看起来该属性是一个@dynamic属性,它在运行时使用不同的实例化路径生成。

问题

如何在单元测试OCMock对象中解决此问题,其方式与在iOS 8上运行单元测试向后兼容?

更新1

将OCMock更新到最新版本(3.1.5)并不能解决问题。

有关其他上下文,以下是我们如何在OCMock中使用NSURLSessionDataTask。测试在第三行失败。

NSURLSessionDataTask *task = [[NSURLSessionDataTask alloc] init];
OCMockObject *mockTask = [OCMockObject partialMockForObject:task];
[[[mockTask stub] andReturn:urlResponse] response];

1 个答案:

答案 0 :(得分:2)

OCMock 3.2现已上市,解决了这个问题。

修复程序为"Add ability and tests for mocking dynamic properties"