unit-testing - 什么是严格和非严格模拟?

标签 unit-testing mocking moq

我已经开始使用 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)返回类型 Tfoo.Quux .

犀牛创始人recommends that you avoid strict mocks (并且更喜欢 stub ),因为您通常不希望在收到上述意外调用时测试失败。当您必须修复数十个依赖于确切原始行为的测试时,它会使重构代码变得更加困难。

关于unit-testing - 什么是严格和非严格模拟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3134108/

相关文章:

c# - 预期在 mock 上调用一次,但为 0 次 With Moq

php - 如何在 Lumen 5.4 中进行单元测试证书交换

c# - Moq - 设置通用返回类型

javascript - Karma 找不到配置文件中指定的文件

javascript - 如何在 Node.js 中设置服务器时间

python - 如何在 Python 单元测试中模拟一个类?

tdd - RhinoMock : Mocks Vs StrictMocks Vs DynamicMocks

c# - 使用 Moq 模拟存储库

java - 如何为具有 Autowiring 依赖项的类创建模拟 spring bean

python - Django:两个字段是唯一的,但仍然失败唯一约束