考虑以下代码
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:
,但仍然没有。
答案 0 :(得分:1)
expect
返回OCMockRecorder
的实例。 OCMock通过拦截OCMockRecorder
未实现的方法来工作。因此,您无法真正模拟NSProxy
,NSObject
或OCMockRecorder
定义的方法。您将通过此测试获得相同的结果:
-(void)testSomething {
id mock = [OCMockObject mockForClass:[NSObject class]];
[[[mock expect] andReturn:OCMOCK_VALUE((int){2})] hash];
[mock hash];
[mock verify];
}
如果这不仅仅是一个学术练习,并且您想要实际测试自定义isEqual:
实现,那么就没有理由嘲笑它。只需使用在测试中应该和不应匹配的对象直接调用isEqual:
。