我有模拟工作,我测试模拟对象上的方法是否使用正确的参数调用,并返回正确的结果。
现在我想检查另一个条件。在这种情况下,不应在模拟对象上运行任何方法。如何在单元测试中表达这一点?
我有模拟工作,我测试模拟对象上的方法是否使用正确的参数调用,并返回正确的结果。
现在我想检查另一个条件。在这种情况下,不应在模拟对象上运行任何方法。如何在单元测试中表达这一点?
您可以创建严格的模拟。这样,仅允许运行您设置的方法(或期望的方法,具体取决于您使用的 Moq 版本)。
var foo = new Mock<IFoo>(MockBehavior.Strict);
foo.Expect(f => f.Bar());
每当在 foo 上调用 Bar() 以外的方法时,都会引发异常并且您的测试将失败。
两种最直接的方法是使用 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());