目前,我的开发流程如下:
在我看来,根据定义,我的集成测试正在测试我可以创建的每个模型,控制器和视图。实际上,我是否因为不编写单元测试而遗漏了什么?
答案 0 :(得分:8)
我实际上非常同情你的观点。我喜欢Cucumber 和我喜欢RSpec - 我同时使用它们,但并不总是使用相同的代码。例如,我现在很少为Rails控制器编写RSpec示例,而且我几乎从不编写视图规范。我的大多数控制器非常相似,并且不会偏离“库存”控制器模式 - 这已经过Rails自己的单元测试的良好测试。再次验证相同的行为并不会花费很多时间和模拟所有模型的麻烦。由于Cucumber处于集成级别,我可以跳过这种模拟,并获得我正在寻找的基本验证。在大多数情况下,Cucumber中的视图测试处理得更加透明。 (然后我应该看到“foo”等等。)
但这并不是说我在Rails中没有广泛使用RSpec。我将它用于我的逻辑所在的地方:模型,控制器过滤器和视图助手。我还有几个项目几乎是所有业务逻辑,例如针对复杂第三方接口的库或API适配器。对于那些我经常发现自己使用RSpec并跳过Cucumber的人。
作为一种启发式方法,我建议您强烈考虑在下列任何问题都可以回答“是”时编写单元测试:
如果以上都不是真的,那么也许你可以通过集成测试来逃避。同样,在很多情况下这是合理的。但如果你以后遇到问题,请准备好付出代价 - 而且如果他们看起来需要,价格应该包括随时编写单元测试。
答案 1 :(得分:3)
集成测试可用于验证代码的不同部分是否已很好地集成。它们可能涉及所有层并覆盖所有代码但是...当集成测试失败时,它会告诉您错误的位置吗?我可能错了,但我不这么认为。这只会告诉你某处存在问题。另一方面,当真实单元测试(使用模拟或存根单独编写)失败时,您确切知道问题所在的单位(这实际上是单元测试的目的,验证单元是否实现了预期的行为) 。换句话说,单元测试和集成测试都很有用,但它们有不同的用途。
答案 2 :(得分:2)
你有任何佣金任务吗?自定义capistrano代码? Cron方法?一个API? Monkeypatches? flex或iPhone应用程序集成怎么样?职业跑步者?
在典型的Rails应用程序中,HTML UI没有执行大量代码。所以不,除非你的应用程序非常简单,否则webrat测试是不够的。