【发布时间】:2013-03-25 14:14:57
【问题描述】:
我正在处理一个项目,该项目包含大量未包含在测试中的遗留代码。
我有什么方法可以设置集成服务器来检查所有新提交是否具有最少的测试量(例如,覆盖率 >70%)?
基本上,我看到了两个选项:
- 当提交的更改未包含在单元测试中时,以某种方式设置 CI 服务器以使构建失败。这将确保每段新代码都有测试,并且旧代码的测试会随着每次更改而增加。
- 为整个项目设置覆盖阈值,如果在提交后覆盖百分比降低,则构建失败。这样做的问题是,如果我删除一个包含 100 条指令的类并添加一个包含 50 条指令的新类,那么覆盖率就会上升,而无需我编写任何测试。
我更喜欢选项 1,因为它强制对遗留代码的更改进行单元测试。这应该会增加整体测试覆盖率。
现在我们使用 Jenkins 作为 CI 服务器,使用 JaCoCo 进行测试覆盖。 Maven 用于构建项目,SVN 是我们的主要源代码控制。
【问题讨论】:
-
请记住,100% 的覆盖率不一定是可能的,甚至是不希望的。覆盖数字也可以被操纵;为测试类编写单元测试会人为地扩大测试覆盖率。
-
@MikeRylander 我知道,我什至不梦想 100% 覆盖这个项目。但我仍然认为强制新的更改至少有一些覆盖面是好的。
-
我目前正在努力解决这个问题,主要解决@MikeRylanders 的评论。 pitest.org 现在与版本控制集成。下一个版本将允许通过 scm 状态分析文件。以下版本将允许按日期范围或提交进行分析,这将允许构建服务器检查修改后的代码是否满足给定的突变分数。
-
@henry 感谢您的链接。听起来很棒,我会试一试。直到现在才听说过突变测试。因为你,我将在接下来的几天里阅读 wiki、常见问题解答和热门话题。谢谢;)
-
@DenisRosca 突变测试确实很棒 - 请注意它非常占用 CPU,因此您需要仔细考虑如何使用它。
标签: java jenkins continuous-integration code-coverage jacoco