在rspec中,您可以创建mock
或double
。这两个看起来几乎是一回事,我在文档中找不到任何消除歧义的东西。
有什么区别?
答案 0 :(得分:38)
mock
和stub
都是更通用的double
的别名。与context
和describe
一样,它们可以互换使用,以使规范的目的更加清晰。这在The RSpec Book中有更详细的描述。
答案 1 :(得分:2)
似乎只是aliases,因为:__declared_as
似乎没有被用于消息。
答案 2 :(得分:1)
双打
当我们依赖具有非确定性特征的组件时,我们可能会发现文件损坏,磁盘故障,网络超时以及服务器在运行规范的过程中出现故障。因为这些是我们无法控制的事情,当我们运行我们的规范时,它们会导致不一致和令人惊讶的结果。双打可以将我们的示例与这些依赖项的实际实现断开。
存根
当系统行为基于序列时。存根是完美的。因为每个例子都可以指定不同的序列。例如: - 在随机生成器的情况下,它显然是不确定的来源。我们想用稳定的序列替换真正的随机发生器。
嘲笑
有些时候我们需要来自另一个可能尚不存在的对象的服务。在这种情况下,我们可以引入模拟对象。我们可以将其编程为我们目前期望的对象。因此,当我们专注于交互时,模拟对象使其更容易实现。