[英]OCMock an NSOperation
我正在尝试编写一些单元测试来测试我们正在编写的一些自定义NSOperations
。 我想做的是创建NSOperation
的模拟并将其放在NSOperationQueue
,然后等待它完成。 我知道我可以调整方法而根本不使用OCMoc
k,但我真的不想这样做。 我想用OCMock
。 我试图运行的代码如下所示:
MYOperation *operation = [MYOperation new];
id mockOperation = [OCMockObject partialMockForObject:operation];
[NSOperationQueue *queue = [NSOperationQueue new];
[queue setMaxConcurrentOperationCount:1];
[queue addOperation:mockOperation];
当单元测试到达此行时:
[queue addOperation:mockOperation];
我调用了一个解除分配的对象异常。 有人对我如何克服这个问题有任何建议吗?
如果您正在使用ARC,则可能在创建模拟后立即释放operation
,因为它不会再次访问。 如果将其更改为此,则应修复错误:
[queue addOperation:operation];
...无论如何你应该做的 - 你正在测试你的对象,而不是模拟。
使用ARC时,Apple运行时对mockOperation中对象的引用将被设置为nil(我认为过于激进)。 但并非所有人都失去了。 您可以使用mockOperation设置存根和期望,并仍将操作传递给addOperation:方法; 即使您使用对原始对象的引用,部分模拟也会起作用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.