首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OCMock an NSOperation

OCMock an NSOperation
EN

Stack Overflow用户
提问于 2012-05-18 21:26:53
回答 2查看 841关注 0票数 5

我正在尝试编写一些单元测试来测试我们正在编写的一些自定义NSOperations。我想要做的是创建一个NSOperation的模型,并将其放在NSOperationQueue上,然后等待它完成。我知道我可以混用这些方法而完全不使用OCMock,但我真的不想这样做。我想用OCMock。我尝试运行的代码类似于以下代码:

代码语言:javascript
复制
MYOperation *operation = [MYOperation new];
id mockOperation = [OCMockObject partialMockForObject:operation];
[NSOperationQueue *queue = [NSOperationQueue new];
[queue setMaxConcurrentOperationCount:1];
[queue addOperation:mockOperation];

当单元测试到达这一行时:

代码语言:javascript
复制
[queue addOperation:mockOperation];

我收到一个对已释放对象异常的调用。有人对我如何克服这个问题有什么建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-22 01:45:08

如果你使用的是ARC,operation很可能在你创建模拟之后就被释放了,因为它不会再被访问。如果你把它改成这样,它应该会修复这个错误:

代码语言:javascript
复制
[queue addOperation:operation];

...which你无论如何都应该这样做--你是在测试你的对象,而不是模拟。

票数 2
EN

Stack Overflow用户

发布于 2012-05-24 22:33:11

当使用ARC时,苹果运行时会将mockOperation中对象的引用设置为nil (我认为太过激进了)。然而,并不是所有的东西都失去了。您可以使用mockOperation设置存根和期望,并仍然将操作传递给addOperation:方法;即使您使用对原始对象的引用,部分模拟也可以工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10653531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档