首页 文章

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

提问于
浏览
6

我有模拟工作,我测试我的模拟对象上的方法使用正确的参数调用,并返回正确的结果 .

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

2 回答

  • 16

    两种最直接的方法是使用MockBehaviour.Strict:

    var moqFoo = new Mock<IFoo>(MockBehaviour.Strict);  
    //any calls to methods that there aren't expectations set for will cause exceptions
    

    或者您总是可以使用回调并从那里抛出异常(如果有一个特定的方法不应该被调用 .

    var moqFoo = new Mock<IFoo>(MockBehaviour.Loose);  
    moqFoo.Expect(f => f.Bar()).Callback(throw new ThisShouldNotBeCalledException());
    
  • 3

    你可以创建你的模拟严格 . 这样,只允许运行您设置的方法(或Expect,具体取决于您正在使用的Moq版本) .

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

    每当在除了Bar()之外的foo上调用方法时,都会引发异常并且您的测试将失败 .

相关问题