メソッドがMoqで呼び出されなかったことを確認するにはどうすればよいですか?
AssertWasNotCalled のようなものはありますか?
更新: バージョン 3.0 から、新しい構文を使用できます。
mock.Verify(foo => foo.Execute("ping"), Times.Never());
オプションを使用して、テスト後に検証を実行しTimes.Never()
ます。
_mock.Object.DoSomething()
_mock.Verify(service => service.ShouldntBeCalled(), Times.Never());
更新:バージョン3以降、上記の質問の更新または以下のダンの回答を確認してください。
どちらか、あなたのモックを厳密にして、あなたが期待していないメソッドを呼び出した場合に失敗するようにします
new Mock<IMoq>(MockBehavior.Strict)
または、モックを緩めたい場合は、.Throws(Exception)を使用します。
var m = new Mock<IMoq>(MockBehavior.Loose);
m.Expect(a => a.moo()).Throws(new Exception("Shouldn't be called."));
盗まれたもの: 「Moq をよりよく理解するために助けが必要」という質問に対する John Foster の回答
テストしたいことの 1 つは、65 歳以上の人がメソッドに渡されたときに、pay メソッドが呼び出されないことです。
[Test] public void Someone_over_65_does_not_pay_a_pension_contribution() { var mockPensionService = new Mock<IPensionService>(); var person = new Person("test", 66); var calc = new PensionCalculator(mockPensionService.Object); calc.PayPensionContribution(person); mockPensionService.Verify(ps => ps.Pay(It.IsAny<decimal>()), Times.Never); }
これは Moq の最近のバージョン(少なくとも 3.1 以降) では機能しません
Verify
。回答に記載されているように、メソッドで指定する必要があります。
本当は、.AtMost(0)
Returns ステートメントの後に指定した方がよいでしょう。
var m = new Mock<ISomething>();
m.Expect(x => x.Forbidden()).Returns("foo").AtMost(0);
「スロー」も機能しますAtMost(0)
が、より表現力豊かな私見です。
.AtMostOnce(); を使用します。
実際のテストの後、メソッドを再度呼び出します。例外がスローされた場合は、呼び出されています。