Unit testing Moq:如何断言我的模拟对象上的方法没有运行?

Unit testing Moq:如何断言我的模拟对象上的方法没有运行?,unit-testing,moq,Unit Testing,Moq,我让mock工作,我测试我的mock对象上的方法是否使用正确的参数调用,并返回正确的结果 现在我想检查另一个条件。在这种情况下,不应在模拟对象上运行任何方法。我如何在单元测试中表达这一点 最简单的两种方法是使用MockBehavior。严格: var moqFoo = new Mock<IFoo>(MockBehaviour.Strict); //any calls to methods that there aren't expectations set for will ca

我让mock工作,我测试我的mock对象上的方法是否使用正确的参数调用,并返回正确的结果


现在我想检查另一个条件。在这种情况下,不应在模拟对象上运行任何方法。我如何在单元测试中表达这一点

最简单的两种方法是使用MockBehavior。严格:

var moqFoo = new Mock<IFoo>(MockBehaviour.Strict);  
//any calls to methods that there aren't expectations set for will cause exceptions
var moqFoo=newmock(mockbehavior.Strict);
//对未设置期望值的方法的任何调用都将导致异常
或者,您可以始终使用回调并从那里抛出异常(如果存在不应调用的特定方法)

var moqFoo = new Mock<IFoo>(MockBehaviour.Loose);  
moqFoo.Expect(f => f.Bar()).Callback(throw new ThisShouldNotBeCalledException());
var moqFoo=newmock(mockbehavior.Loose);
moqFoo.Expect(f=>f.Bar()).Callback(抛出新this不应成为calledException());

您可以创建严格的模拟。这样,只有您设置的方法(或期望的方法,取决于您使用的Moq版本)才允许运行

var foo = new Mock<IFoo>(MockBehavior.Strict);
foo.Expect(f => f.Bar());
var foo=newmock(MockBehavior.Strict);
Expect(f=>f.Bar());

任何时候在除Bar()之外的foo上调用一个方法,都会引发一个异常,您的测试将失败。

谢谢!我不确定在文档中查找什么(尽可能少)。您的两个注释是相同的。这是您的意图吗?@Nam Gi VU,不是,已经删除了第二次出现。谢谢。