3

Xcodeを使用してiPadアプリケーションで行っているテスト駆動開発を支援するためにOCMockを使用しています。次のようなテストコードがあります。

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

コンパイルしようとすると、次のような警告とエラーが表示されます。

警告: 'setDirection:' という名前の複数のメソッドが見つかりました

エラー: 'Vector' を互換性のないタイプ
'UISwipeGestureRecognizerDirection' (別名 'enum UISwipeGestureRecognizerDirection') のパラメーターに送信しています

明らかに、コンパイラは、モックが想定されているオブジェクトのタイプを判断できません。別のクラスの setDirection メソッドではなく、SomeProtocol プロトコルの 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 に答える