私は障害物にぶつかっていて、ここの素晴らしい集団精神が助けになるかどうか疑問に思っています. ObjC CocoaTouch では、構造体パラメーターを受け取り、構造体を返すオブジェクトをモックしようとしています。OCMock が毛玉を吐いているので、Hamcrest マッチャでラッピングしてみました。死ぬな。私がテストしている関数/メソッドは次のようになります。
- (CLLocationCoordinate2D)pixelToLatLong:(CGPoint)aPoint;
私は次のようなコードを使用します:
#define OCMOCK_STRUCT(atype, variable) [NSValue value:&variable withObjCType:@encode(atype)]
-(void) testMyWidget
{
CLLocationCoordinate2D ulLL = (CLLocationCoordinate2D){123,456};
CLLocationCoordinate2D lrLL = (CLLocationCoordinate2D){654,321};
[[[(id)myObj expect] andReturn:OCMOCK_STRUCT(CLLocationCoordinate2D, ulLL)] pixelToLatLong:(CGPoint){0,0}];
[[[(id)myObj expect] andReturn:OCMOCK_STRUCT(CLLocationCoordinate2D, lrLL)] pixelToLatLong:(CGPoint){320,460}];//lower right point
}
それはちょっとうまくいきます。したがって、テストしているオブジェクトで、必要な編集を行って、緑色のバーを取得します...エラー..ビルド情報ウィンドウの緑色のボタン。テストに合格するはずだと確信している場合、アサーション失敗エラーが発生します。エラーは、メソッドが予期せず呼び出されたことを通知し、これらの構造体の値を疑問符としてリストします。Hamcrestマッチャーで構造体をラップしようとしましたが、どこにも行きません。私はデバッガーを分解する準備をしています。間違いなく何が問題なのかを教えてくれます。OCMock/Hamcrest と構造体で同様の問題を抱えている人はいますか? もしそうなら、これらのタイプを処理する最良の方法は何ですか?