【问题标题】:Test or not test?测试还是不测试?
【发布时间】:2016-04-08 23:47:28
【问题描述】:
今天我开始了一个项目,我必须将一个后端分成两部分,我不知道后端到底是做什么的,只是我必须将特定服务移动到新的 spring、jersey、maven 多模块项目中。
因此,迁移任务非常简单,现在是时候编写测试了。此前,该项目没有任何测试。
当我开始从我的 Business Objects 编写 JUnit 时,我发现大多数服务仅使用 DAO 执行基本操作,例如 getAll、获取、保存、更新和删除。其他服务通过了商务验证,但并不复杂。
所以问题更具理论性:
我是否应该编写 JUnit 来测试一个简单的 DAO 获取,该获取将被模拟(无集成测试),这样做的好处是什么?
这将是对简单 DAO get、getAll 或 create 进行集成测试的正确方法(之前没有任何验证要执行的创建)
【问题讨论】:
标签:
java
unit-testing
continuous-integration
automated-tests
integration-testing
【解决方案1】:
单元和集成测试是为开发人员准备的,所以如果您不认为某些开发人员会从测试中受益 - 不要编写它。还要考虑测试验证行为,而不是代码,所以如果你没有看到任何需要测试的行为 - 不要花时间。
在您的情况下,我最多会为服务编写集成测试,也许还可以为 DAO(如果没有 ORM)编写集成测试。
无论如何,您问题的正确答案取决于您需要为项目提供的质量水平、团队规模、破坏性代码更改的可能性等。
两个例子:
1) 小站点的 CRUD 风格的管理面板,只有一个开发人员同时引入更改,几乎没有业务逻辑。错误的存在并不重要。
在这种情况下,我不会将时间花在任何测试上 - 很可能您需要专注于其他事情(例如客户端)。
2) 您正在启动一个复杂的项目,该项目目前采用 CRUD 风格,但存在远程服务/DAO 之间的交互,业务逻辑有时会变得复杂。团队正在迅速成长/变化,多人参与,新开发人员无法轻松理解系统的工作原理。错误的存在对业务不利。
在这种情况下,我至少会从服务的集成测试开始。