Hudson中的Java代码覆盖率

Rob*_*anu 14 java code-coverage hudson emma cobertura

我正在将一些项目从一个ant构建迁移到一个maven.构建服务器是,并将保留,Hudson.

由于测试运行并记录了两次问题,我在使用cobertura在哈德森录制代码覆盖时遇到了麻烦.

该项目是多模块的,尽管不是必需的,但是具有代码覆盖率数据的聚合输出将是很好的.

总而言之,我正在寻找的解决方案必须:

  • 对所有模块运行自动化测试并记录一次结果;
  • 在Hudson中显示单个模块代码的覆盖范围;
  • 为整个项目轻松配置一次,而不是在每个模块中配置.

解决方案可以基于Cobertura,或Emma,或任何其他Java代码覆盖工具.


更新:使用Emma运行测试仍然会复制结果并且没有merge功能,因此它不适用于多模块构建.

vic*_*ugo 8

Sonar是一个非常酷的工具,很容易与Hudson集成,我真的很喜欢它的组织与多模块项目.你应该试一试

alt text http://sonar.codehaus.org/wp-content/uploads/2009/08/dashboard.png


小智 6

它有点hackish,但我正在使用的方法是使用Maven cobertura插件修改版本(可以从他们的回购中获得).它提供了一个cobertura:generate-report目标,因此您可以分别在测试运行之前和之后将cobertura:instrument和cobertura:generate-report插入到您的生命周期中.这将为您提供所需的覆盖数据,而无需重复的测试执行/记录.

潜在的问题是我遇到的所有非三叶草Maven覆盖插件都是围绕着与Maven生命周期中的主要测试执行分开运行测试的想法而构建的.显然,这导致两组测试执行.如果您正在使用自由式项目,那么您将只记录一组测试(因为,即使有两个测试执行,也只有一个测试输出的副本),但Maven项目类型实际上拦截了Maven mojo执行和在测试执行时记录测试输出/结果,而不是像自由式项目那样在构建结束时记录测试输出/结果.这有很多优点,但它也有一个相当明显的缺点,即执行两次的单个测试被计为两次测试.

也就是说,虽然我已经看到了针对非检测代码和检测代码运行测试的强有力论据,但我更倾向于只对测试代码运行一次测试 - 不仅仅是因为Maven/Hudson问题,而是因为当你'我们进行了45分钟的测试,看起来非常愚蠢地运行它们两次以产生相同的结果.