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

标签 ocmock

我正在使用 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')

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

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

最佳答案

使用类型转换限定模拟将消除歧义:

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

关于ocmock - 编译器对模拟对象感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14421054/

相关文章:

objective-c - Objective-C : How to get and call a block argument from NSInvocation - stubbing Twitter account on iOS

objective-c - OCMock 测试结构体的地址

ios - OCMock 方法中的 stub block

iOS OCMock 部分 vs 类模拟

ios - 为什么我不能使用 OCMock stub GKTurnBasedParticipant 的这个方法?

objective-c - 如何在 ARC 中从 id __autoreleasing * 转换为 void **?

ios - 使用AFNetworking与OCMock的测试方法

ios - 使用 OCMock 期待来自非实例化变量的方法调用

ios - Swift Unit 测试用例 - Mock 框架

ios - 需要有关 iOS 的 BDD 的建议