gpt4 book ai didi

tdd - 不同测试替身之间的区别重要吗?

转载 作者:行者123 更新时间:2023-12-01 14:42:06 24 4
gpt4 key购买 nike

我刚刚在阅读 Martin Fowler 的帖子 Mocks Aren't Stubs .他定义了不同的测试替身(或者更确切地说,引用了 Gerard Meszaros 的 xUnit patterns book ):

  • Dummy objects are passed around but never actually used. Usually they are just used to fill parameter lists.
  • Fake objects actually have working implementations, but usually take some shortcut which makes them not suitable for production (an in memory database is a good example).
  • Stubs provide canned answers to calls made during the test, usually not responding at all to anything outside what's programmed in for the test. Stubs may also record information about calls, such as an email gateway stub that remembers the messages it 'sent', or maybe only how many messages it 'sent'.
  • Mocks are ... objects pre-programmed with expectations which form a specification of the calls they are expected to receive.

我的问题的第一部分是,这是否具有权威性?这种语言是否被广泛使用和理解?

我的问题的第二部分似乎是我选择的模拟框架,Mockito ,很容易模糊界限,当然是模拟和 stub 之间的界限。

  • 一切都被称为“模拟”。通过调用 Mockito.mock() 方法或使用 @Mock 注释,您可以使用“mock”一词来创建模拟、 stub ,有时甚至是虚拟对象(如果简单的“new”行不通)。异常(exception)是一个“ spy ”,它可能被用来制作类似“假货”的东西,但也可以用来包装您的测试系统。
  • 即使您不关心创建测试替身的方法的名称,也可以验证(或不验证)替身并且您可以在验证步骤中包含一个捕获,这似乎包括一些东西stub 可以(记住进行的调用)和 mocks(验证是否进行了某些预期的调用)。

我问的原因是我尝试根据上面看到的四件事来命名我的 double ,但有时会混淆某些东西是否真的具有 stub 或模拟的作用。那么,这是 Mockito 的缺陷,还是事情就是这样演变的,区别并不重要?

最佳答案

实际上,这是 Mockito 的强项。 Mockito mock 是一个对象,您可以在其上“ stub ”方法或“验证”方法,或两者​​兼而有之。 (为相同的方法同时执行这两种操作有点代码味道,但那是另一个话题)。因此,Mockito 模拟既是“ stub ”(在 Martin Fowler 的意义上)又是“模拟”(在 Martin Fowler 的意义上);但您不必同时使用它。通常,Mockito 模拟将充当“ stub ”或“模拟”;两者兼而有之。

在其他一些模拟框架中,您没有这种级别的灵 active 。如果你想对模拟进行“验证”,你还必须进行“ stub ”。在这些框架中,模拟必须既充当“ stub ”又充当“模拟”。据我所知,促使 Szczepan Faber 创建 Mockito 的因素之一是希望能够将“ stub ”行为和“模拟”行为(在这两个词的严格意义上的 Martin Fowler 意义上)分开。

关于tdd - 不同测试替身之间的区别重要吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8826047/

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