我已经开始使用 moq 进行模拟。有人可以解释一下严格和非严格模拟的概念吗?它们如何在最小起订量中使用?
编辑:
在哪种情况下我们使用哪种类型的模拟?
最佳答案
我不确定起订量,但这里是严格的模拟在 Rhino 中的工作方式。我声明我希望接到 foo.Bar
的电话在我的对象上foo
:
foo.Expect(f => f.Bar()).Returns(5);
如果调用代码确实
foo.Bar();
那么我很好,因为期望得到了完全满足。
但是,如果调用代码是:
foo.Quux(12);
foo.Bar();
然后我的期望失败了,因为我没有明确期望调用
foo.Quux
.总而言之,如果有任何与预期不同的地方,严格的模拟将立即失败。另一方面,非严格的模拟(或 stub )会很乐意“忽略”对
foo.Quux
的调用。它应该返回 default(T)
返回类型 T
的 foo.Quux
.犀牛创始人recommends that you avoid strict mocks (并且更喜欢 stub ),因为您通常不希望在收到上述意外调用时测试失败。当您必须修复数十个依赖于确切原始行为的测试时,它会使重构代码变得更加困难。
关于unit-testing - 什么是严格和非严格模拟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3134108/