SonarQube正在为我的项目报告以下内容。
Unit Tests Coverage 0.0%; Line Coverage 0.0%; Condition Coverage 0.0%
无法找到在声纳扫描之前立即创建的报告。我正在使用Jenkins启动SonarQube扫描。事实上,在控制台输出中,我可以看到正在执行的单元测试,并且报告保存在surefire目录中。
以下是控制台输出的相关日志。
[INFO] --- maven-surefire-plugin:2.12:test (default-test) @ earn-promotional-domain ---
[INFO] Surefire report directory: /var/jenkins/workspace/earn/surefire-reports
[INFO] [13:50:20.807] Sensor SurefireSensor
[INFO] [13:50:20.807] parsing /var/jenkins/workspace/earn/surefire-reports
[ERROR] [13:50:20.808] Reports path not found or is not a directory: /var/jenkins/workspace/earn/surefire-reports
[INFO] [13:50:20.808] Sensor SurefireSensor (done) | time=1ms
[INFO] [13:50:20.808] Sensor CoberturaSensor
[INFO] [13:50:20.808] parsing /var/jenkins/workspace/earn/site/cobertura/coverage.xml
我正在使用SonarQube 5.1.2。如果需要任何有助于解决问题的其他信息,请告诉我。
答案 0 :(得分:1)
Jacoco比cobertura更好。 Cobertura还有很多尚未解决的漏洞。
Jacoco也提供了一个聚合器插件,它将聚合所有子模块的覆盖范围并显示全面的覆盖范围。
Jacoco也不需要为SonarQube添加任何其他插件。
以下是实施Jacoco的一个很好的例子: http://www.petrikainulainen.net/programming/maven/creating-code-coverage-reports-for-unit-and-integration-tests-with-the-jacoco-maven-plugin/
答案 1 :(得分:0)
如果您更喜欢坚持使用Cobertura而不是转向Jacoco,您可以尝试使用cobertura maven插件的替代方案:
https://github.com/QualInsight/qualinsight-mojo-cobertura
以下是mojo提供的一些优点:
项目页面上的文档说明了如何将转换后的报告添加到SonarQube。
答案 2 :(得分:0)
如@Jeel所述,您可以使用替代插件。但如果你必须使用cobertura插件,你可以稍微修改一下。
如果我理解正确,cobertura:检查目标是否有当前生命周期,合并插件特定配置(cobertura-maven-plugin-XXjar \ META-INF \ maven \ lifecycle.xml)并执行分叉生命周期测试阶段。之后执行“检查”mojo。
要让cobertura不分叉生命周期,你可以发表评论< executePhase>用于检查目标的插件描述符(cobertura-maven-plugin-X.X.jar \ META-INF \ maven \ plugin.xml)中的标记。 另外,您必须将配置从lifecycle.xml复制到构建配置。对于2.7版,只有surefire配置:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${surefire.version}</version>
<configuration>
<classesDirectory>${project.build.directory}/generated-classes/cobertura</classesDirectory>
<testFailureIgnore>false</testFailureIgnore>
</configuration>
</plugin>
(可能使用components.xml扩展默认生命周期也可以。)
在最后一步中,您必须在“进程类”阶段为“工具”目标添加执行,因为它在插件描述符中没有默认阶段。
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>cobertura-maven-plugin</artifactId>
<version>${cobertura.version}</version>
<executions>
<execution>
<id>instrument-classes</id>
<phase>process-classes</phase>
<goals>
<goal>instrument</goal>
</goals>
</execution>
<execution>
<id>check-coverage</id>
<goals>
<goal>clean</goal>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>