web-dev-qa-db-ja.com

モックオブジェクト-セットアップ方法-テスト駆動開発

私はテスト駆動開発を学び、モックにMoqライブラリを使用しようとしています。 MockクラスのSetupメソッドの目的は何ですか?

34
meckrt

Moq Mockオブジェクトのデフォルトの動作は、すべてのメソッドとプロパティをスタブ化することです。つまり、パラメーターを指定したそのメソッド/プロパティの呼び出しは失敗せず、特定の戻り値型のデフォルト値を返します。

次のいずれかまたはすべての理由でSetupメソッドを呼び出します。

  • メソッドへの入力値を制限します。
_public interface ICalculator {
  int Sum(int val1, val2);
}

var mock = new Mock<ICalculator>();
mock.Setup(m=>m.Sum(
  It.IsAny<int>(), //Any value
  3                //value of 3
));
_

上記の設定では、メソッドSumの呼び出しと、_val1_および_val2_値3の任意の値が一致します。

  • 特定の値を返したい。引き続きICalculatorの例では、次のセットアップは入力パラメーターに関係なく値10を返します。
_var mock = new Mock<ICalculator>();
mock.Setup(m=>m.Sum(
  It.IsAny<int>(), //Any value
  It.IsAny<int>()  //Any value
)).Returns(10);
_
  • セットアップ後にMock<T>.VerifyAll()を使用して、以前のセットアップがすべて呼び出されたことを確認します(一度)。
_var mock = new Mock<ICalculator>();
mock.Setup(m=>m.Sum(
  7, //value of 7
  3                //value of 3
));

mock.Setup(m=>m.Sum(
  5, //value of 5
  3                //value of 3
));

mock.VerifyAll();    
_

上記のコードは、Sumが2回呼び出されることを確認します。 _(7,3)_で1回、_(5,3)_で1回。

44
Igor Zevaka

セットアップメソッドは、モックオブジェクトに期待値を設定するために使用されます。例:

mock.Setup(foo => foo.DoSomething("ping")).Returns(true);

ここでは、モックオブジェクトにDoSomethingメソッドを設定しています。パラメーターが「ping」の場合、メソッドはtrueを返します。

これで、このオブジェクトは、用途に応じてモックまたはスタブとしてさらに機能します。状態ベースのテストで使用する場合は、スタブとして機能できます。動作ベースのテストで使用する場合は、モックとして機能できます。動作テストでは、モックオブジェクトでverifyメソッドを呼び出して、メソッドが「ping」パラメーターで呼び出されたことをアサートします。

これらのリンクをさらに参照してください。

http://martinfowler.com/articles/mocksArentStubs.html

http://code.google.com/p/moq/wiki/QuickStart

11
P.K