使用Cucumber和rspec的BDD - 何时多余?

wup*_*tah 38 tdd unit-testing rspec ruby-on-rails cucumber

Rails /工具特定版本:您的单元测试有多深?

现在,我现在写道:

  • 黄瓜功能(集成测试) - 这些测试针对我们的应用程序返回的HTML/JS,但有时也会测试其他内容,例如调用第三方服务.
  • RSpec控制器测试(功能测试),最初只有控制器有任何有意义的逻辑,但现在越来越多.
  • RSpec模型试验(单元试验)

有时这是完全必要的; 有必要测试模型中对最终用户来说并不完全明显或可见的行为.当模型很复杂时,一定要进行测试.但有时候,在我看来,测试是多余的.举例来说,你的测试方法foo如果只是通过所谓的bar,并bar进行测试?如果bar是在Cucumber特性中使用并且可以在黄瓜特征中轻松测试的模型上的简单辅助方法怎么办?你在rspec和Cucumber中测试方法吗?我发现我自己为此而努力,为编写更多的测试需要时间和保持什么是有效的同样的行为,这使得维护测试套件的更多的时间密集,这反过来又使修改更昂贵的多个"版本".

简而言之,您是否认为有时候只写Cucumber功能就足够了?或者你应该总是在每个级别测试?如果您认为存在灰色区域,那么"这需要功能/单元测试"的阈值是多少.实际上,你现在做什么,为什么(或为什么不)你认为这已经足够了?


编辑:这是一个可能是"测试矫枉过正"的例子.不可否认,我能够很快写出来,但这完全是假设的.

Sid*_*ane 27

好问题,我最近在使用Rails应用程序时也遇到了问题,也使用了Cucumber/RSpec.我尝试尽可能在每个级别进行测试,但是,我发现随着代码库的增长,我有时会觉得我在不必要地重复自己.

使用"Outside-in"测试,我的过程通常类似于:Cucumber Scenario - > Controller Spec - > Model Spec.越来越多的我发现自己跳过控制器规格,因为黄瓜场景涵盖了他们的大部分功能.我通常会回去添加控制器规格,但它可能感觉像是一件苦差事.

我经常采取的一个步骤是在我的黄瓜特征上运行rcov,rake cucumber:rcov并寻找覆盖范围内显着的差距.这些是我确保关注的代码区域,因此它们具有良好的覆盖范围,无论是单元测试还是集成测试.

我相信模型/库应该广泛进行单元测试,因为它是核心业务逻辑.它需要在正常的Web请求/响应过程之外单独工作.例如,如果我通过Rails控制台与我的应用程序交互,我就直接使用业务逻辑,我希望能够确保我在模型/类上调用的方法经过了充分的测试.

在一天结束时,每个应用程序都是不同的,我认为这取决于开发人员确定应该将多少测试覆盖率用于代码库的不同部分并找到正确的平衡,以便您的测试套件不会当你的应用程序增长时,你会陷入困境.

这是一篇有趣的文章,我从我的书签中挖出来值得一读:http: //webmozarts.com/2010/03/15/why-not-to-want-100-code-coverage/