【发布时间】:2010-08-02 22:35:11
【问题描述】:
我正在使用 Grails 进行开发。由于该框架将引导数据和完全刷新的 Spring 上下文,我发现我为服务编写了很多集成测试。让我换个说法:我发现我没有为服务编写单元测试,只编写集成测试。这是一个坏主意吗?我看到的唯一缺点是我的测试需要更长的时间才能运行。
我确实在控制器上使用单元测试,因为在控制器中我正在测试各种应用程序流、结果类型、重定向逻辑等。但我编写的大多数测试都是集成测试。这似乎与传统的 J2EE 测试有所不同,传统的 J2EE 测试主要是编写单元测试。
edit- 明确一点,我没有编写集成测试,因为代码太复杂了,只有集成测试才能做到。我编写集成测试是因为一起测试所有内容更容易,因为框架为您提供了很多。我会模拟某些事情,比如如果服务与 acegi authenticationService 协作,我会模拟它。每当我们与 Web 服务交互时,我也会模拟,因为您必须这样做才能获得无需特殊设置即可运行的测试。
【问题讨论】:
-
集成测试可能比单元测试更脆弱。如果您发现自己主要编写集成测试,请考虑重构您的项目,以便更容易进行单元测试。如果您的代码编写成可测试的,您可能会发现单元测试比集成测试更容易编写,并且更稳定(不太容易中断)。集成测试有利于测试系统组件之间的交互,但它们并不总是提供足够的代码覆盖率,因此它们不能替代单元测试。
标签: unit-testing testing grails tdd