持续集成:确保测试涵盖新提交

我正在处理一个项目,该项目包含大量未被测试覆盖的旧代码。

有没有办法设置集成服务器来检查所有新提交是否具有最小数量的测试(例如,覆盖率为>70%)?

从本质上讲,我看到两个选项:

  1. 以某种方式将 CI 服务器设置为在单元测试未涵盖已提交更改时使生成失败。这将确保每段新代码都有测试,并且对旧代码的测试将随着每次更改而增加。
  2. 为整个项目设置覆盖率阈值,如果提交后覆盖率百分比降低,则使生成失败。这样做的问题是,如果我删除一个包含100条指令的类,并添加一个包含50条指令的新类,覆盖率就会上升,而我不需要编写任何测试。

我更喜欢选项1,因为它强制对遗留代码中的更改进行单元测试。这应该会增加整体测试覆盖率。

现在,我们使用 Jenkins 作为我们的 CI 服务器,并使用 JaCoCo 进行测试覆盖。Maven用于构建项目,SVN是我们的主要源代码控制。


答案 1

我知道你可以配置 Jenkins 来验证至少有一个测试文件作为提交的一部分。这并不能确保良好的测试覆盖率,但至少你会知道有某种与测试相关的变化。


答案 2

一些覆盖工具(如 cobertura)支持排除软件包。这样,您可以排除所有旧代码(假设它可以进行模式匹配),并让cobertura仅检查新代码(涵盖新提交)。

我希望这有帮助。


推荐