我正在使用OCMock来帮助测试驱动开发我正在使用Xcode进行iPad应用程序。我有这样的测试代码:
id mock = [OCMockObject mockForProtocol:@protocol(SomeProtocol)];
Vector direction = { 1.0f, 2.0f, 3.0f };
[[mock expect] setDirection:direction];
当我尝试编译时,我收到警告和错误:
警告:名为'setDirection:'的多个方法找到了
错误:将'vector'发送到不兼容类型的参数
'UISwipeGestureRecognizerDirection'(又名'enum UISwipeGestureRecognizerDirection')
显然,编译器无法确定模拟应该是什么类型的对象。我不确定如何指定它应该处理来自SomeProtocol协议的setDirection方法而不是来自另一个类的setDirection方法。
如何成功构建这样的测试用例?
答案 0 :(得分:6)
使用演员表来模拟模拟将消除歧义:
[(id<SomeProtocol>)[mock expect] setDirection:direction];
答案 1 :(得分:2)
对于OCMock 3现代语法:
id protocolMock = OCMProtocolMock(@protocol(MYProtocol));
OCMExpect([(id <MYProtocol>)protocolMock ambiguousMethod]);