インターフェースがあるとしましょう
public interface A {
int Foo1();
int Foo2();
int Foo3();
}
そして、( Moqを使用して)モックを使用したテスト方法
Mock<A> mock = new Mock<A>();
現在、基本的に 2 つのテスト シナリオがあります。
シナリオ 1
インターフェイスの実装が任意のメソッドで特定の例外をスローした場合に、テスト対象のシステムが何をするかをテストしたいと考えています。だから私は同じ例外をスローするようにすべてのメソッドをセットアップしたい
mock.Setup(x => x.Foo1()).Throws(new Exception());
mock.Setup(x => x.Foo2()).Throws(new Exception());
mock.Setup(x => x.Foo3()).Throws(new Exception());
シナリオ 2
メソッドが任意の数値を返す場合、テスト対象のシステムが何をするかをテストしたいと思います。だから私はモックを次のようにセットアップすることを考えることができました
mock.Setup(x => x.Foo1()).Returns(1);
mock.Setup(x => x.Foo2()).Returns(1);
mock.Setup(x => x.Foo3()).Returns(1);
理由: テスト対象のシステムに対してさまざまな単体テストを行っています。それらのいくつかは、返される値などの違いを生むビジネスロジックのテストです。しかし、一部は一般的な動作の小さなテストです。たとえば、使用されているコンポーネントの 1 つが例外をスローした場合に、テスト対象のシステムが例外をスローする場合などです。またはその反対で、すべてのコンポーネントが期待どおりに動作する場合、テスト対象のシステムは例外をスローしません。そして、これらの小さなテストのために、私は今上記のようなコードを使用しています.
質問: モックのすべての (一致する) メソッドを同じ方法で初期化するよりスマートな方法はありますか? 何かのようなもの
mock.SetupAll().Throws(new Exception());
また
mock.SetupAll<int>().Returns(1);
(つまり、戻り値の型を持つメソッドをセットアップしますint
)?