我正在尝试编写一些单元测试来测试我们正在编写的一些自定义NSOperations。我想要做的是创建一个NSOperation的模型,并将其放在NSOperationQueue上,然后等待它完成。我知道我可以混用这些方法而完全不使用OCMock,但我真的不想这样做。我想用OCMock。我尝试运行的代码类似于以下代码:
MYOperation *operation = [MYOperation new];
id mockOperation = [OCMockObject partialMockForObject:operation];
[NSOperationQueue *queue = [NSOperationQueue new];
[queue setMaxConcurrentOperationCount:1];
[queue addOperation:mockOperation];当单元测试到达这一行时:
[queue addOperation:mockOperation];我收到一个对已释放对象异常的调用。有人对我如何克服这个问题有什么建议吗?
发布于 2012-05-22 01:45:08
如果你使用的是ARC,operation很可能在你创建模拟之后就被释放了,因为它不会再被访问。如果你把它改成这样,它应该会修复这个错误:
[queue addOperation:operation];...which你无论如何都应该这样做--你是在测试你的对象,而不是模拟。
发布于 2012-05-24 22:33:11
当使用ARC时,苹果运行时会将mockOperation中对象的引用设置为nil (我认为太过激进了)。然而,并不是所有的东西都失去了。您可以使用mockOperation设置存根和期望,并仍然将操作传递给addOperation:方法;即使您使用对原始对象的引用,部分模拟也可以工作。
https://stackoverflow.com/questions/10653531
复制相似问题