这不是最好的事情,但我想验证一个对象的私有方法被调用,所以我创建了一个局部模拟并在私有方法上添加了一个期望。
Synchronizer * sync = [[Synchronizer alloc] initWithCleanup:YES];
sync = [OCMockObject partialMockForObject:sync];
[[(id)sync expect] cleanupPreviousContents];
当我运行测试时,不调用cleanupPreviousContents但测试仍然成功。错误在哪里?
此致 昆汀
答案 0 :(得分: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];