3

moqを使用すると、入力に関するさまざまな条件を使用して、同じメソッドでSetupを複数回呼び出すことができます。

// Arrange
Mock<IObject> stub = new Mock<IObject>();
stub.Setup(method => method.Foo(It.IsAny<int>())
    .Returns<int>(value => value);
stub.Setup(method => method.Foo(It.Is<int>(t => t == 100)
    .Returns<int>(value => value * 1.10);

var sut = new TestedObject(stub.Object);

// Act
var actual = sut.Bar();
...

...等々。この場合、Fooメソッドは整数を取り、渡された値に応じてメソッドの実装を決定します。

Visual Studioの偽物でこれを達成する方法はありますか?コードは次のようになります。

// Arrange
var stub = new StubIObject
{
    Foo = (value) => value,    // This covers the default case (It.IsAny<T>)
};

var sut = new TestedObject(stubIObject);

// Act
var actual = sut.Bar();

しかし、他の条件付きケースをどのように設定しますか?

編集:これは奇妙な設定であることに気づきました。通常、1つの単体テストでスタブのさまざまな実装をテストすることはありません。これは純粋に学術的な質問です-私はこのタイプのコードを単体テストに入れません...おそらく。

4

1 に答える 1

3

偽物を使用すると、基本的に、生成されたスタブメソッドの実装として機能するデリゲートを提供できるため、そのデリゲート内に任意の条件付きロジックを配置できます。

あなたの場合、moqの例と同等の場合、次の設定:

var stub = new StubIObject
{
    Foo = (value) => 
       {
           if (value == 100)  
              // This covers the case (It.Is<int>(t => t == 100))
              return value * 1.10;
           return value;    // This covers the default case (It.IsAny<T>)
        }
};
于 2013-01-31T12:14:47.187 に答える