特定于Rails/工具的版本:How deep are your unit tests?
现在,我正在写:
- Cucumber特性(集成测试)——这些测试针对我们的应用程序返回的HTML/JS,但有时也测试其他东西,比如对第三方服务的调用.
- RSpec控制器测试(功能测试),最初仅当控制器有任何有意义的逻辑时,但现在越来越多.
- RSpec模型测试(单元测试)
有时这是完全必要的;有必要在模型中测试最终用户不完全明显或不可见的行为.当模型很复杂时,一定要对它们进行测试.但其他时候,在我看来,这些测试是多余的.例如,如果方法foo
只被bar
调用,而bar
被测试,你会测试它吗?如果bar
是一个模型上的简单辅助方法,该模型由Cucumber特性使用且易于测试,该怎么办?你在rspec和Cucumber中测试过这种方法吗?我发现自己很难做到这一点,因为编写更多的测试需要时间,并且维护实际上相同行为的多个"版本",这使得维护测试套件更加耗时,这反过来又使得更改更加昂贵.
简言之,你认为有一段时间只写黄瓜特性就足够了吗?或者你应该在每个级别都进行测试?如果您认为存在灰色区域,那么"这需要功能/单元测试"的阈值是多少实际上,你目前在做什么?为什么(或为什么不)你认为这是足够的?
EDIT:Here's an example of what might be "test overkill."不可否认,我写这篇文章很快,但它完全是假设性的.