是否有可能从部分模拟中"预期"一种方法

Que*_*tin 1 ocmock

这不是最好的事情,但我想验证一个对象的私有方法被调用,所以我创建一个局部模拟并在私有方法上添加一个期望.

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

sync = [OCMockObject partialMockForObject:sync];
[[(id)sync expect] cleanupPreviousContents];      
Run Code Online (Sandbox Code Playgroud)

当我运行测试时,不调用cleanupPreviousContents但测试仍然成功.这个bug在哪里?

问候,昆汀

Chr*_*lay 7

是的,这是完全有效的事情.但是您需要为部分模拟创建一个新引用:

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

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

... do something

[mockSync verify];
Run Code Online (Sandbox Code Playgroud)

cleanupPreviousContents称为你的内initWithCleanup法?如果是这样,你将不得不以不同的方式构建它:

Synchronizer *sync = [Synchronizer alloc];

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

[sync initWithCleanup:YES];

[mockSync verify];
Run Code Online (Sandbox Code Playgroud)