Tron Thomas
Tron Thomas

Reputation: 871

Compiler confused about mock object

I'm using OCMock to aid in Test Driven Development I am doing for an iPad application using Xcode. I have test code like this:

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

When I try to compile, I'm getting warnings and errors like this:

warning: multiple methods named 'setDirection:' found

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

Obviously the compiler is not able to determine what type of object the mock is supposed to be. I'm not sure how to specify that it should deal with the setDirection method from the SomeProtocol protocol instead of a setDirection method from another class.

What can be done to make a test case like this build successfully?

Upvotes: 3

Views: 854

Answers (2)

Michael M. Myers
Michael M. Myers

Reputation: 2515

For the OCMock 3 modern syntax:

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

Upvotes: 2

Travis
Travis

Reputation: 6252

Qualifying the mock with a cast will eliminate the ambiguity:

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

Upvotes: 6

Related Questions