Moq でメソッドが呼び出されなかったことを確認するにはどうすればよいですか?
AssertWasNotCalledのようなものがありますか?
更新:バージョン3.0以降、新しい構文を使用できます。
mock.Verify(foo => foo.Execute("ping"), Times.Never());
UPDATE:バージョン3以降、上記の質問またはDannの回答の更新を確認してください。
どちらか、モックを厳密にして、期待していないメソッドを呼び出すと失敗するようにします
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."));
Times.Never
enumセットを持つテストの後に検証を実行します。例えば.
_mock.Object.DoSomething()
_mock.Verify(service => service.ShouldntBeCalled(),Times.Never());
盗まれた: 質問に対するジョンフォスターの回答、「Moqをよりよく理解するために助けが必要」
テストしたいことの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
メソッドで指定する必要があります。
実際には、Returnsステートメントの後に.AtMost(0)
を指定する方が適切です。
var m = new Mock<ISomething>();
m.Expect(x => x.Forbidden()).Returns("foo").AtMost(0);
「スロー」も機能しますが、AtMost(0)
はより表現力豊かです。