2013-01-20 63 views
3

我使用OCMock来帮助测试驱动开发我正在为使用Xcode的iPad应用程序进行测试。我有测试这样的代码:编译器混淆模拟对象

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

当我尝试编译,我得到警告和错误是这样的:

warning: multiple methods named 'setDirection:' found

error: sending'Vector' to parameter of incompatible type
'UISwipeGestureRecognizerDirection' (aka 'enum UISwipeGestureRecognizerDirection')

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

可以做些什么来使这样的测试案例成功?

回答

6

排位赛与铸造模拟将消除歧义:

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

对于OCMock 3现代语法:

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