如何验证Moq中没有调用该方法?

如何验证Moq中没有调用该方法?

它是否有像AssertWasNotCalled?

更新:从版本3.0开始,可以使用新的语法:

mock.Verify(foo => foo.Execute("ping"), Times.Never());

更新 :从版本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枚举集的测试之后运行验证。 例如

_mock.Object.DoSomething()
_mock.Verify(service => service.ShouldntBeCalled(),Times.Never());

从John Foster对这个问题的回答中“偷走了解Moq需要帮助”

您可能想要测试的一件事是,当65岁以上的人被传入方法时,薪酬方法不会被调用

[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());
}
链接地址: http://www.djcxy.com/p/35333.html

上一篇: How to verify that method was NOT called in Moq?

下一篇: Global static variable not "staying defined" outside of function