Moq中的单元测试Mock/Stub定义

WDu*_*ffy 13 testing unit-testing moq

我在单元测试中给出的任何阅读或建议总是暗示了Mock和Stub的定义之间的明显区别.我目前对这些定义的理解如下

模拟:假的,将在您的测试中用于做出最终断言

存根:一个假的,将在您的测试中用于隔离依赖但不被断言

然而,Moq似乎只允许创建Mocks.框架中的Stub命名空间似乎已被折旧,建议使用Mock.SetupXXX.

我对此有何看法?或者是否有一般性的理解,模拟对象实际上可以用作存根?

也许我是迂腐的,只是我总是发现编程中的语言非常严格,并且更喜欢让我正确使用它,特别是当其他开发人员可能接管一个项目时.

Eri*_*ing 16

根据Moq项目网站,Moq提供:

使用简单的MockBehavior枚举对模拟行为进行粒度控制(无需了解模拟,存根,伪造,动态模拟等之间的理论差异)

模拟,存根等之间缺乏区别是一个深思熟虑的设计决策; 一个人喜欢的设计决定.如果我需要一个真正的模拟,我会打电话Verify()给它.如果没有,那就没有了Verify().我喜欢简单,我没有发现自己错过了mock和之间的区别stub.


Don*_*oby 11

Martin Fowler写了一篇很好的文章,Mocks Are not Stubs,我认为这个区别很清楚.

模拟用于行为验证,而存根提供虚假数据并且通常参与状态验证.