iOS プロジェクトの単体テストに OCHamcrest と OCMockito を使用しています。パラメータを取るメソッドの期待値の模擬検証でカスタム マッチャーを使用して理解を深めようとしています。特に、予期されるメソッドに渡されたパラメーターの 1 つを確認したいのですが、そのためには渡されたパラメーターを引き離す必要があります。実証するために、テストメソッドの関連部分について私が持っているものは次のとおりです。
EAAccessory *accessory = mock([EAAccessory class]);
UIViewController <ZKSearchManagerDelegate> *mockController =
mockObjectAndProtocol(
[UIViewController class], @protocol(ZKSearchManagerDelegate)
);
[verify(mockController)
zkZSensorFound:isSensorWithAccessory(accessory)
fromSearchManager:_sm];
は-zkZSensorFound:fromSearchManager:
、 を含むオブジェクトをEAAccessory
プロパティとして受け取ります。accessory
カスタム マッチャーで、そのオブジェクトを開いてそのプロパティを調べ、このテスト メソッド内のオブジェクトと同じであることを確認する必要があります。ここで行っているようにマッチャーに渡すのは簡単accessory
ですが、マッチャー内で使用するためにパラメーターに渡される実際のオブジェクトを取得するにはどうすればよいでしょうか? それとも、私はこれについてすべて間違っていますか?
アップデート
@JonReid からの回答を受け入れました。これは、私が作成したものよりもはるかにエレガントなソリューションです。それにもかかわらず、私が使用していたもの (このブログ投稿のおかげで) は、他の場所で役立つ可能性があると思います:
#import "ArgumentCaptor.h"
EAAccessory *accessory = mock([EAAccessory class]);
UIViewController <ZKSearchManagerDelegate> *mockController =
mockObjectAndProtocol(
[UIViewController class], @protocol(ZKSearchManagerDelegate)
);
ArgumentCaptor *captor = argCaptor();
[verify(_mockController) zkZSensorFound:(ZKZSensor *)captor
fromSearchManager:is(sameInstance(_sm))];
ZKZSensor *sensor = captor.argument;
assertThat(sensor.accessory, is(_mockAccessory));