1

这不是最好的做法,但我想验证是否调用了对象的私有方法,因此我创建了一个部分模拟并在私有方法上添加了期望。

Synchronizer * sync = [[Synchronizer alloc] initWithCleanup:YES];

sync = [OCMockObject partialMockForObject:sync];
[[(id)sync expect] cleanupPreviousContents];      

当我运行测试时, cleanupPreviousContents 没有被调用,但测试仍然成功。错误在哪里?

问候,昆汀

4

1 回答 1

7

是的,这是一件非常有效的事情。但是您需要为部分模拟创建一个新的参考:

Synchronizer * sync = [[Synchronizer alloc] initWithCleanup:YES];

id mockSync = [OCMockObject partialMockForObject:sync];
[[mockSync expect] cleanupPreviousContents];  

... do something

[mockSync verify];

cleanupPreviousContents在你的initWithCleanup方法中调用的吗?如果是这样,您将不得不以不同的方式构造它:

Synchronizer *sync = [Synchronizer alloc];

id mockSync = [OCMockObject partialMockForObject:sync];
[[mockSync expect] cleanupPreviousContents];  

[sync initWithCleanup:YES];

[mockSync verify];
于 2012-01-02T19:05:54.647 回答