モック(Moq)オブジェクトのリスト-ベストプラクティス/簡略化
-
07-07-2019 - |
質問
次のことを考慮してください:
new SUT(null, null, new List<IObjectBeingMocked>() { mockObjectOne.Object, mockObjectTwo.Object })
My SUT(テスト対象システム)には、3番目のパラメーターとしてオブジェクトのリストが必要です。これらにいくつかの期待値を設定したので、これらはモックである必要があります。
リスト内の各項目で .Object
を呼び出す必要をなくすことができるように、どのようにクリアしますか?通常2つの項目しかありませんが、これは成長する可能性があり、私の意見では、テストが読みにくくなります。
このモックオブジェクトのリストを実際のオブジェクトに簡単/適切に変換する最良の方法は何ですか?
解決
すべてのモックされたSUTインスタンスのコレクションを返すMocks.Query()メソッドを使用できます。
この機能は、moqのベータ版に存在します。詳細については、こちら:
他のヒント
拡張メソッドを使用して、リストの作成とObjectプロパティの呼び出しを管理できます。
var list = new List<Mock<Foo>>() { ... };
new SUT( null, null, list.Select( o => o.Object ).ToList() );
これを処理する良い方法は、1か所で一度だけ作成するGetSUT()メソッドを作成することです。その後、SUTの作成が変更されても、1か所で変更するだけで済みます。
説明変数を導入(ローカル)して、明確にすることができます。
IObjectBeingMocked objectOne = mockObjectOne.Object;
IObjectBeingMocked objectTwo = mockObjectTwo.Object;
new SUT(null, null, new List<IObjectBeingMocked>() { objectOne, objectTwo });
編集:おそらく、私の「objectOne」、「objectTwo」よりも適切な名前を使用します。 ;)
所属していません StackOverflow