OCMock是一个NSOperation

Nic*_*ina 5 iphone unit-testing objective-c ocmock

我正在尝试编写一些单元测试来测试NSOperations我们正在编写的一些自定义.我想要做的是创建一个模拟NSOperation并将其放在上面NSOperationQueue,然后等待它完成.我知道我可以调整方法而根本不使用OCMock,但我真的不想那样做.我想用OCMock.我试图运行的代码如下所示:

MYOperation *operation = [MYOperation new];
id mockOperation = [OCMockObject partialMockForObject:operation];
[NSOperationQueue *queue = [NSOperationQueue new];
[queue setMaxConcurrentOperationCount:1];
[queue addOperation:mockOperation];
Run Code Online (Sandbox Code Playgroud)

当单元测试到达此行时:

[queue addOperation:mockOperation];
Run Code Online (Sandbox Code Playgroud)

我调用了一个解除分配的对象异常.有人对我如何克服这个问题有任何建议吗?

Chr*_*lay 2

如果您使用 ARC,operation则可能会在创建模拟后立即释放,因为不会再次访问它。如果你将其更改为这样,它应该可以修复错误:

[queue addOperation:operation];
Run Code Online (Sandbox Code Playgroud)

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