Meszaros 描述的存根、模拟和间谍之间有什么区别?

What is the difference between stubs, mocks, and spies as described by Meszaros?

提问人:Kodigas 提问时间:11/15/2023 最后编辑:Kodigas 更新时间:11/15/2023 访问量:20

问:

注意。我阅读了一些关于此事的 SO 帖子,包括这篇

以下是 Martin Fowler 使用的分类

虚拟对象被传递,但从未实际使用过。通常,它们仅用于填充参数列表。

对象实际上具有工作实现,但通常需要 一些快捷方式使它们不适合生产(在 内存数据库就是一个很好的例子)。

存根提供预设答案 测试期间拨打的电话,通常根本没有回应任何事情 在为测试编程的内容之外。

间谍是存根,也 根据它们的调用方式记录一些信息。一种形式 这可能是一个电子邮件服务,记录了它有多少条消息 送。

模拟就是我们在这里谈论的:预先编程的对象 具有期望值,这些期望值构成了它们所属的调用的规范 预计会收到。

在这些类型的替身中,只有模拟坚持行为验证

因此,假人与状态验证结合使用,模拟与行为验证结合使用。但是间谍去哪里呢?我知道 Mockito(具有部分模拟行为的真实对象)如何使用该术语,但是 Fowler(他从 Gerard Meszaros 的“xUnit 测试模式”一书中获取它)所描述的“标准”测试双重分类中的模拟是什么?

另外,这三者如何相互关联?例如,一个是另一个的特例吗?Fowler 说 spy 是一个存根(spy 是 stub 的一个特例),而这篇文章说 mock 是 stub 和 spy 的组合(mock = stub + spy)

我在脑海中多次尝试解决所有这些问题,但到目前为止还没有成功

使用 Junit + Mockito(+ AssertJ,如果需要的话)的 Java 示例会很棒

Java 单元测试 模拟

评论


答: 暂无答案