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

OCMock -[NSURLSessionDataTask response] unrecognized selector crash in iOS 9

问题

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

剧情变厚了

iOS9 之前的测试运行就好了。 属性 在 iOS 9.

上应用程序的正常回调流程中也能正常工作

然而,对于 iOS 9 Beta,测试在运行时崩溃并出现 "unrecognized selector sent to instance" 错误。 属性 存在于框架 header 中,未在文档中标记为已删除。

此示例代码说明了问题:

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

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

一个理论

似乎 class 的直接实例化不再在运行时给出 属性。 属性 似乎是一个 @dynamic 属性,它是在运行时使用不同的实例化路径生成的。

问题

我如何在单元测试 OCMock objects 中以一种向后兼容 运行 iOS 8 上的单元测试的方式解决这个问题?

更新 1

将 OCMock 更新到最新版本 (3.1.5) 无法解决问题。

对于其他上下文,这里是我们如何将 NSURLSessionDataTask 与 OCMock 一起使用。测试在第三行失败。

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

OCMock 3.2 现已发布,解决了这个问题。

修复是 "Add ability and tests for mocking dynamic properties"