我正在使用hudson CI来管理一个直接的java web项目,使用ant来构建。
我想强制要求单元测试覆盖率不会比之前的版本差,从而确保始终测试任何新代码,或者至少覆盖范围不断改进。
是否有以这种方式工作的哈德森插件?
编辑:我目前正在使用Emma,但愿意切换到另一个覆盖应用。
另外,作为澄清,我已经看到了一些Hudson插件的阈值,但这并不是我所追求的。例如,我想要的是,如果Build#12的覆盖率总体上是46%,并且有人在Build#13中检查了45%的覆盖率,则构建将会中断。
我想这样做的原因是我有一个测试覆盖率低的代码库。我们没有时间回去并追溯写单元测试,但我想确保覆盖率不断提高。
更新:Dan指出了我的计划的边缘案例肯定会成为一个问题。我想我需要重新考虑这是否是一个好主意。
答案 0 :(得分:8)
是。您使用的是哪种覆盖工具?
Hudson的Cobertura插件绝对支持这一点。在项目配置屏幕上,您可以指定阈值。
或者,您可以通过使用cobertura-check任务使Ant失败构建(而不是Hudson)。
编辑:我不确定您是否可以完全满足您的要求。即使你可以,也可能证明是有问题的。例如,假设您的平均覆盖率为75%,但对于一个级别,您的覆盖率为80%。如果删除80%的类及其所有测试,即使其他代码都没有比之前测试的更少,也会降低整体覆盖率。
答案 1 :(得分:3)
这是一种黑客行为,但我们使用Findbugs和Checkstyle的原因类似。您可以设置Ant任务来执行以下操作(这可以拆分为多个任务,但为了简洁我将它们组合在一起):
echo
任务)。请注意,步骤2到5不一定需要使用本机Ant任务完成 - 您可以使用Ant的javac
任务来运行Java程序来为您执行此操作。
然后,配置Hudson:
显然,您可以将文件名/路径和控制台输出等内容替换为构建上下文中的任何内容。
正如我上面提到的,这是相当hacky,但它可能是为数不多的(只有?)方法之一,让Hudson将之前版本中的内容与当前版本进行比较。
答案 2 :(得分:0)
另一种方法是使用Hudson的Sonar插件来保持覆盖率随时间的趋势,并使其更容易吸收和分析结果。它还将显示其他度量的上下文,例如checkstyle和pmd
答案 3 :(得分:0)
Atlassian的Clover支持你想要的东西。查看clover-check Ant任务,特别是historyDir属性。