モック(Moq)オブジェクトのリスト-ベストプラクティス/簡略化

StackOverflow https://stackoverflow.com/questions/1429793

  •  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」よりも適切な名前を使用します。 ;)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top