我有模拟工作,我测试模拟对象上的方法是用正确的参数调用的,并返回正确的结果。
现在我想检查另一个条件。在这种情况下,应该对模拟对象运行NO方法。如何在单元测试中表达这一点?
答案 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());