繁体   English   中英

OCMock是一个NSOperation

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM