TDD中驱动程序和存根之间的区别

时间:2015-08-18 14:54:55

标签: unit-testing testing rspec tdd

我有使用Rspec的Ruby和TDD的经验,主要用于后端单元测试。

我最近开始学习测试背后的理论,包括一些新概念; DriversStubs

这些术语的定义似乎在网上有所不同,只是比他们的帮助更让人困惑。

据我所知,存根在Rspec中是双打的? 不知道在哪里放置司机?

任何人都可以对此有所了解吗?

1 个答案:

答案 0 :(得分:4)

简而言之,存根是测试调用的代码的双倍测试,并期望从中获得一些返回值。创建一个驱动程序以模拟调用者的测试代码。

例如,如果要测试用户身份验证登录组件。您可以创建一个具有最小到无逻辑的存根来伪造“经过身份验证”或“未经过身份验证”的响应,而不是使用外部LDAP服务器测试该组件。然后,您可以创建一个驱动程序来伪造调用者(HTML页面,控制器等),将请求发送到身份验证组件。

Robert (Uncle Bob) MartinGerard Meszaros进一步解释了不同类型的测试加倍:

  1. Dummy - 最简单的测试double,它不采取任何操作并尽可能接近任何值返回值(例如类型的零值)。
  2. Stub - 一个测试双精度数,返回最接近测试需求的值。如果您测试需要传递true,则存根将返回true
  3. 间谍 - 除了返回测试所需的值之外,间谍还会记录在执行测试期间是否发生了某些步骤。例如,在测试计算器的算术加法方法时,间谍检查以确保调用+运算符。如果没有这样的电话,间谍将无法通过测试。
  4. 真正的模仿 - 真正的模拟比间谍有更多的行为。它具有内部验证,以确保在执行测试期间发生某些断言。
  5. 有一点需要注意的是,您的测试加倍的行为越多,偏离实际系统的实际行为的可能性就越大。就个人而言,我尽量避免测试双打。如果我真的必须创建它们,我从最简单的形式开始,让我的测试通过。

    最后,术语令人困惑,而且经常使用不当。就个人而言,我不会过于沉溺于它,只是使用在给定情况下对我有用的最简单的解决方案。