【发布时间】:2010-09-25 16:08:25
【问题描述】:
我知道我如何使用这些术语,但我想知道对于 faking、mocking 和 stubbing 是否有公认的定义单元测试?你如何为你的测试定义这些?描述您可能会使用每种情况的情况。
我是这样使用它们的:
Fake:实现接口但包含固定数据且没有逻辑的类。只需根据实现返回“好”或“坏”数据。
Mock:实现接口并允许动态设置返回值/从特定方法抛出异常的能力并提供检查特定方法是否已调用/未调用的能力的类调用。
存根:类似于模拟类,只是它不提供验证方法是否已调用/未调用的能力。
模拟和存根可以手动生成或由模拟框架生成。假类是手工生成的。我主要使用模拟来验证我的类和依赖类之间的交互。一旦我验证了交互并通过我的代码测试备用路径,我就会使用存根。我主要使用假类来抽象出数据依赖关系,或者当模拟/存根过于繁琐而无法每次设置时。
【问题讨论】:
-
嗯,你基本上在你的“问题”中说了这一切:) 我认为这些术语的定义非常好
-
维基百科对 Fake 的定义与此不同,声称 Fake “用作更简单的实现,例如在测试中使用内存数据库而不是进行真正的数据库访问)”参见 @987654321 @
-
我从以下资源中学到了很多,Robert C. Martin(鲍勃叔叔)的精彩解释:The Little Mocker on The Clean Code Blog。它解释了假人、测试替身、存根、间谍、(真正的)模拟和假货之间的区别和微妙之处。它还提到了 Martin Fowler,并解释了一些软件测试历史。
-
testing.googleblog.com/2013/07/…(简短的一页摘要)。
-
这是我的解释:Test Doubles: Fakes, Stubs and Mocks(带有示例的博客文章)
标签: unit-testing mocking language-agnostic terminology definition