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

时间:2009-01-29 02:59:20

标签: unit-testing moq

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

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

2 个答案:

答案 0 :(得分:16)

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

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

每次在foo上调用除Bar()之外的方法时,都会引发异常并且你的测试会失败。

答案 1 :(得分:3)

两种最直接的方法是使用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());