3

我正在使用 OCMock 来帮助我使用 Xcode 为 iPad 应用程序做的测试驱动开发。我有这样的测试代码:

id mock = [OCMockObject mockForProtocol:@protocol(SomeProtocol)];
Vector direction = { 1.0f, 2.0f, 3.0f };
[[mock expect] setDirection:direction];

当我尝试编译时,我收到如下警告和错误:

警告:找到多个名为“setDirection:”的方法

错误:将“向量”发送到不兼容类型
“UISwipeGestureRecognizerDirection”的参数(又名“枚举 UISwipeGestureRecognizerDirection”)

显然,编译器无法确定 mock 应该是什么类型的对象。我不确定如何指定它应该处理来自 SomeProtocol 协议的 setDirection 方法,而不是来自另一个类的 setDirection 方法。

可以做些什么来成功构建这样的测试用例?

4

2 回答 2

6

用演员来限定模拟将消除歧义:

[(id<SomeProtocol>)[mock expect] setDirection:direction];
于 2013-03-06T21:39:21.713 回答
2

对于 OCMock 3 现代语法:

id protocolMock = OCMProtocolMock(@protocol(MYProtocol));
OCMExpect([(id <MYProtocol>)protocolMock ambiguousMethod]);
于 2016-04-26T18:36:47.580 回答