2013-10-14 79 views
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] 
} 

回答

1

您可以使用[[yourMock reject] setState:OCMOCK_ANY];

+0

快到了,但是...的的setState:方法的参数是一个枚举。 'typedef enum {...} DownloaderState'。它似乎不适用于OCMOCK_ANY。有没有解决方法? – aspyct

+0

对不起,但我不知道该怎么做,没有什么像OCMOCK_ANY_VALUE。也许其他人可以帮助... ...作为替代方案,您可以使用普通模拟(不好),并存储可能在您的模拟中调用的方法,或拒绝setState:所有可能的参数。 – e1985

+0

另一个解决方法是使用真实对象而不是模拟,并直接检查状态属性的值。在测试代​​码之前,您可以将其设置为enum中不存在的值,并在检查值是否仍然相同之后进行测试......如果您想要存根/期望某些东西,也可以创建此对象的部分模拟... – e1985