在RSpec中,mock和double之间的区别是什么?

时间:2011-09-09 09:39:21

标签: ruby-on-rails ruby testing rspec

在rspec中,您可以创建mockdouble。这两个看起来几乎是一回事,我在文档中找不到任何消除歧义的东西。

有什么区别?

3 个答案:

答案 0 :(得分:38)

mockstub都是更通用的double的别名。与contextdescribe一样,它们可以互换使用,以使规范的目的更加清晰。这在The RSpec Book中有更详细的描述。

答案 1 :(得分:2)

似乎只是aliases,因为:__declared_as似乎没有被用于消息。

答案 2 :(得分:1)

双打

当我们依赖具有非确定性特征的组件时,我们可能会发现文件损坏,磁盘故障,网络超时以及服务器在运行规范的过程中出现故障。因为这些是我们无法控制的事情,当我们运行我们的规范时,它们会导致不一致和令人惊讶的结果。双打可以将我们的示例与这些依赖项的实际实现断开。

存根

当系统行为基于序列时。存根是完美的。因为每个例子都可以指定不同的序列。例如: - 在随机生成器的情况下,它显然是不确定的来源。我们想用稳定的序列替换真正的随机发生器。

嘲笑

有些时候我们需要来自另一个可能尚不存在的对象的服务。在这种情况下,我们可以引入模拟对象。我们可以将其编程为我们目前期望的对象。因此,当我们专注于交互时,模拟对象使其更容易实现。