6

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

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

4

2 回答 2

16

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

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

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

于 2009-01-29T03:04:55.783 回答
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());
于 2009-01-29T03:04:45.597 回答