编译器对模拟对象感到困惑

时间:2013-01-20 02:14:05

标签: ocmock

我正在使用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方法。

如何成功构建这样的测试用例?

2 个答案:

答案 0 :(得分:6)

使用演员表来模拟模拟将消除歧义:

[(id<SomeProtocol>)[mock expect] setDirection:direction];

答案 1 :(得分:2)

对于OCMock 3现代语法:

id protocolMock = OCMProtocolMock(@protocol(MYProtocol));
OCMExpect([(id <MYProtocol>)protocolMock ambiguousMethod]);