在期望并在Custom isEqual实现上调用isEqual时,OCMock失败

时间:2014-03-12 18:29:52

标签: ios ocmock xctest

考虑以下代码

OCMockObject *mock = [OCMockObject mockForClass:[NSObject class]];
[[[mock expect] andReturnValue:OCMOCK_VALUE((BOOL){YES})] isEqual:[OCMArg any]];
[mock isEqual:[NSObject new]];
[mock verify];

有人可以告诉我为什么会失败

  

测试失败: - [NSObject_tests testIsEqualIsCalled]失败:   OCMockObject [NSObject]:未调用预期方法:(null)

这实际上没有意义。我尝试使用andReturn:代替andReturnValue:,但仍然没有。

1 个答案:

答案 0 :(得分:1)

expect返回OCMockRecorder的实例。 OCMock通过拦截OCMockRecorder未实现的方法来工作。因此,您无法真正模拟NSProxyNSObjectOCMockRecorder定义的方法。您将通过此测试获得相同的结果:

-(void)testSomething {
    id mock = [OCMockObject mockForClass:[NSObject class]];
    [[[mock expect] andReturn:OCMOCK_VALUE((int){2})] hash];
    [mock hash];
    [mock verify];
}

如果这不仅仅是一个学术练习,并且您想要实际测试自定义isEqual:实现,那么就没有理由嘲笑它。只需使用在测试中应该和不应匹配的对象直接调用isEqual: