私はテスト駆動開発を学び、モックにMoqライブラリを使用しようとしています。 MockクラスのSetupメソッドの目的は何ですか?
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回。
セットアップメソッドは、モックオブジェクトに期待値を設定するために使用されます。例:
mock.Setup(foo => foo.DoSomething("ping")).Returns(true);
ここでは、モックオブジェクトにDoSomething
メソッドを設定しています。パラメーターが「ping」の場合、メソッドはtrueを返します。
これで、このオブジェクトは、用途に応じてモックまたはスタブとしてさらに機能します。状態ベースのテストで使用する場合は、スタブとして機能できます。動作ベースのテストで使用する場合は、モックとして機能できます。動作テストでは、モックオブジェクトでverifyメソッドを呼び出して、メソッドが「ping」パラメーターで呼び出されたことをアサートします。
これらのリンクをさらに参照してください。