gpt4 book ai didi

unit-testing - 伪造、 mock 和 stub 有什么区别?

转载 作者:行者123 更新时间:2023-12-03 03:53:29 26 4
gpt4 key购买 nike

我知道如何使用这些术语,但我想知道对于伪造 mock stub 是否有可接受的定义单元测试?您如何为您的测试定义这些?描述一下您可能会使用每种方法的情况。

以下是我如何使用它们:

Fake:实现接口(interface)但包含固定数据且没有逻辑的类。根据实现简单地返回“好”或“坏”数据。

Mock:一个实现接口(interface)的类,允许动态设置返回值/从特定方法抛出异常,并提供检查特定方法是否被调用的能力已调用。

stub :类似于模拟类,但它不提供验证方法是否已被调用/未调用的能力。

每代人:

  • 模拟 stub 可以手动生成或由模拟框架生成。
  • 假类是手动生成的。

按如下方式使用它们:

  • 模拟主要是为了验证我的类和依赖类之间的交互。
  • stub 一旦我验证了交互并通过我的代码测试备用路径。
  • 假类主要是为了抽象出数据依赖关系,或者当模拟/ stub 过于繁琐而无法每次设置时。

最佳答案

您可以获得一些信息:

来自 Martin Fowler about Mock and Stub

对象实际上有工作实现,但通常采取一些捷径,这使得它们不适合生产

stub 为测试期间调用的电话提供预设答案,通常根本不响应测试编程之外的任何内容。 stub 还可以记录有关调用的信息,例如记住它“发送”的消息的电子邮件网关 stub ,或者可能只记录它“发送”的消息数量。

模拟是我们在这里讨论的内容:预先编程的对象,形成了它们预期接收的调用的规范。

来自 xunitpattern :

:我们获取或构建一个非常轻量级的实现,其功能与 SUT 所依赖的组件所提供的功能相同,并指示 SUT 使用它而不是真实的。

stub :此实现配置为响应来自 SUT 的调用,其值(或异常)将在 SUT 内执行未经测试的代码(请参阅第 X 页的生产错误)。使用测试 stub 的一个关键指标是由于无法控制 SUT 的间接输入而导致代码未经测试

模拟对象,实现与 SUT(被测系统)所依赖的对象相同的接口(interface)。当我们需要进行行为验证时,我们可以使用模拟对象作为观察点,以避免由于无法观察在 SUT 上调用方法的副作用而导致出现未经测试的需求(请参阅第 X 页的生产错误)。

个人

我尝试使用 Mock 和 Stub 来简化。当它是一个返回设置为测试类的值的对象时,我使用 Mock。我使用 stub 来模拟要测试的接口(interface)或抽象类。事实上,你怎么调用它并不重要,它们都是不在生产中使用的类,而是用作测试的实用程序类。

关于unit-testing - 伪造、 mock 和 stub 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/346372/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com