0
在使用OCMock进行的测试中,我必须断言没有调用setState:
选择器。但是,我不能假定对该对象进行的其他调用。OCMock:niceMockForClass期望零方法调用
因为任何其他的呼叫可以进行,我得(还是我?)使用的niceMockForClass:
代替mockForClass:
我怎样才能然后确保不会调用setState:
发? 代码大致是这样的:
- (void)testNoCallIsMadeToSetStateOnReset
{
self.downloader = [OCMock niceMockForClass:[Downloader class]];
[[self.downloader expectZero] setState:OCMOCK_ANY]; // <- how to do this?
// do some stuff
[self.downloader verify]
}
快到了,但是...的的setState:方法的参数是一个枚举。 'typedef enum {...} DownloaderState'。它似乎不适用于OCMOCK_ANY。有没有解决方法? – aspyct
对不起,但我不知道该怎么做,没有什么像OCMOCK_ANY_VALUE。也许其他人可以帮助... ...作为替代方案,您可以使用普通模拟(不好),并存储可能在您的模拟中调用的方法,或拒绝setState:所有可能的参数。 – e1985
另一个解决方法是使用真实对象而不是模拟,并直接检查状态属性的值。在测试代码之前,您可以将其设置为enum中不存在的值,并在检查值是否仍然相同之后进行测试......如果您想要存根/期望某些东西,也可以创建此对象的部分模拟... – e1985