我的构建可以规定我的代码覆盖范围永远不会变得更糟吗?

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

我想要求unit testing覆盖率永远不会比以前的构建更差,从而确保始终测试任何新代码,或者至少覆盖范围不断改进。

是否有一个以这种方式工作的哈德森插件?

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

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

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

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

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

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

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

编辑:我不确定你能做到正是你所要求的。 即使你可以,也可能certificate是有问题的。 例如,假设您的平均覆盖率为75%,但对于一个级别,您的覆盖率为80%。 如果删除该80%的类及其所有测试,则会降低整体覆盖百分比,即使其他代码都没有比以前更少的测试。

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

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

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

然后,配置Hudson:

  • 在“源代码管理”下,确保选中“使用更新”。 这将允许在构建之间保留lastCoverage.txt文件。 请注意,如果您确实需要在构建之间清理事物,这可能会有问题。
  • 使用带有正则表达式的Hudson Text Finder插件在构建输出中搜索“COVERAGE FAILURE”(确保为插件选中“还搜索控制台输出”)。 文本查找器插件可以标记构建不稳定。

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

正如我上面提到的,这是相当hacky,但它可能是为数不多的(只有?)方法之一,让Hudson将之前版本中的内容与当前版本进行比较。

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

Atlassian的Clover支持您想要的东西。 看看三叶草检查 Ant任务,特别是historyDir属性。