6

我正在使用 hudson CI 来管理一个直接的 java web 项目,使用 ant 来构建。

我想强制单元测试覆盖率永远不会比以前的构建差,从而确保始终测试任何新代码,或者至少覆盖率不断提高。

有没有这样的哈德逊插件?

编辑:我目前正在使用 Emma,但愿意切换到另一个覆盖应用程序。

另外,作为澄清,我已经看到了一些 Hudson 插件中的阈值,但这并不是我所追求的。例如,我想要的是,如果 Build #12 的总体覆盖率为 46%,并且有人以 45% 的覆盖率签入 Build #13,则构建会中断。

我想这样做的原因是我有一个测试覆盖率低的代码库。我们没有时间回去追溯编写单元测试,但我想确保覆盖率不断提高。

更新:丹指出了我的计划的一个边缘案例,这肯定会成为一个问题。我想我需要重新考虑这是否是一个好主意。

4

4 回答 4

8

是的。您使用的是哪种覆盖工具?

Hudson 的 Cobertura 插件绝对支持这一点。在项目配置屏幕上,您可以指定阈值。

或者,您可以使用 cobertura-check 任务使 Ant 构建失败(而不是 Hudson)。

编辑:我不确定你能不能完全按照你的要求做。即使你可以,它也可能被证明是有问题的。例如,假设您的平均覆盖率为 75%,但对于一个班级,您的覆盖率为 80%。如果你删除了 80% 的类和它的所有测试,你会降低整体覆盖率,即使没有其他代码的测试比以前少。

于 2008-12-23T18:34:00.803 回答
3

这是一种 hack,但我们出于与 Findbugs 和 Checkstyle 类似的原因使用它。您可以设置一个 Ant 任务来执行以下操作(这可以拆分为多个任务,但为了简洁起见,我将它们组合在一起):

  1. 运行覆盖率测试
  2. 解析覆盖结果,得到覆盖百分比
  3. 从上次构建中读取 tmp/lastCoverage.txt(参见步骤 #5a)
  4. 将当前覆盖百分比与从 lastCoverage.txt 读取的百分比进行比较
    1. 如果百分比没有减少,则将新百分比写入 tmp/lastCoverage.txt 的内容
    2. 如果百分比 DID 减少,则保留原始文件并回显“COVERAGE FAILURE”(与 ant 的echo任务一起)。

请注意,步骤 2 到 5 不一定需要使用本机 Ant 任务来完成 - 您可以使用 Ant 任务之类的东西javac来运行 Java 程序来为您执行此操作。

然后,配置 Hudson:

  • 在“源代码管理”下,确保选中“使用更新”。这将允许您的 lastCoverage.txt 文件在构建之间保留。请注意,如果您真的非常需要在构建之间清理一些东西,这可能会出现问题。
  • 使用带有正则表达式的Hudson Text Finder插件在构建输出中搜索“COVERAGE FAILURE”(确保检查了插件的“Also search console output”)。文本查找器插件可以将构建标记为不稳定。

您显然可以将文件名/路径和控制台输出等内容替换为适合您的构建上下文的任何内容。

正如我上面提到的,这很 hacky,但它可能是让 Hudson 将先前构建中的内容与当前构建进行比较的少数(唯一?)方法之一。

于 2008-12-23T19:34:46.343 回答
0

另一种方法是使用 Hudson 的 Sonar 插件来保持随时间推移的覆盖趋势,并使其更容易吸收和分析结果。它还将在其他度量的上下文中显示覆盖率,例如 checkstyle 和 pmd

于 2009-01-06T07:56:55.873 回答
0

Atlassian 的 Clover 支持您想要的。查看clover-check Ant 任务,特别是 historyDir 属性。

于 2009-07-23T10:12:35.700 回答