私は MoqのVerifiable()の目的は何ですか? で質問を読み、この質問を心に留めています。それを説明するあなたの助けが必要です。
VerifyAll()
は、すべての期待が満たされていることを確認するためのものです。あなたが持っていると仮定します:
myMock.Setup(m => m.DoSomething()).Returns(1);
mySut.Do();
myMock.VerifyAll(); // Fail if DoSomething was not called
HTH
@emaの回答を完成させようと思います。おそらく読者にもっと洞察を与えるでしょう。 mockedオブジェクトがあるとします。これはsutへの依存関係です。 2つのメソッドがあり、例外が発生しないように、またはsutにさまざまなシナリオを作成するためにそれらをセットアップするとします。
_var fooMock = new Mock<Foo>();
fooMock.Setup(f => f.Eat()).Returns("string");
fooMock.Setup(f => f.Bark()).Returns(10);
_sut = new Bar(fooMock.Object);
_
これがarrangeステップでした。次に、実際にテストしたいメソッドを実行します(今あなたはact):
__sut.Test();
_
次にassert with VerifyAll()
:
_fooMock.VerifyAll();
_
ここで何をテストしますか? setupメソッドがcalledであったかどうかをテストします。この場合、どちらかのFoo.Eat() or Foo.Bark()
が呼び出されなかった場合、例外が発生し、テストは失敗します。したがって、実際には、あなたはmixステップを配置してアサートします。また、それが呼び出された回数を確認することはできません。これは_.Verify
_で実行できます(Eat()
関数にParam
と呼ばれるプロパティを持つパラメーターName
があるとします):
_fooMock.Verify(f => f.Eat(It.Is<Param>(p => p.Name == "name")), Times.Once);
_