如何使用Jacoco IT代码覆盖率获得SonarQube和Emma单元测试覆盖率?

时间:2014-03-31 16:44:57

标签: code-coverage sonarqube emma jacoco

当我的单元测试被覆盖时,我试图让Sonar IT代码覆盖率为我工作"通过艾玛。

我的情况:

(1)我有大量使用JMockit的单元测试。删除JMockit不是一个选项。我想获得这些测试的单元测试覆盖率报告。

(2)我有集成测试,只需运行具有不同输入方案的应用程序的核心服务器端部分(它是一个Spring Web应用程序)。我想要IT代码覆盖率报告。

对于第(1)部分,我选择使用Emma进行单元测试覆盖主要是因为我遇到了Jacoco和JMockit一起工作的问题,因为他们在动态测试java类时互相纠缠。这些工具在一起工作存在一些问题 - 我认为没有任何解决方案对单元测试本身具有可靠性和非侵入性。所以最后,我选择使用Emma作为其做的离线仪器"执行代码覆盖。 Jacoco也离线了,但我无法让Sonar在这种模式下获得结果(也许我忘记了一个分号:-))。

对于第(2)部分[ IT代码覆盖部分],我只看到了指定以下属性的能力

sonar.jacoco.itReportPath=build/coverage/jacoco.exec

我只能假设,我们需要使用Jacoco来测试IT测试吗?如果我错了,请纠正我。所以在技术上我可以使用Jacoco进行这部分测试,因为我的集成测试不使用JMockit。

这就是我所做的。我有一个单独的ant任务,它重新编译代码库(剥离出Emma工具),然后重新打包应用程序并运行jacoco:coverage工具来对抗我的集成测试。

问题是..我的单元测试是基于Emma的..所以你怎么告诉Sonar使用Emma插件进行Emma单元测试和Jacoco插件进行IT测试?甚至可以这样做吗?

以下是我设置Sonar属性的方法:

sonar.test=test

sonar.sources=src

sonar.binaries=build/compile

# The value of the property must be the key of the language.
sonar.language=java

# Encoding of the source code
sonar.sourceEncoding=UTF-8

sonar.host.url=http://localhost:9000

sonar.dynamicAnalysis=reuseReports
sonar.java.coveragePlugin=emma
sonar.core.codeCoveragePlugin=emma
sonar.jacoco.itReportPath=build/coverage/jacoco.exec
sonar.emma.reportPath=build/coverage
sonar.junit.reportsPath=build/test/report
sonar.surefire.reportsPath=build/test/report

我的ant build运行Emma单元测试(以Emma形式输出),然后运行IT测试并输出到jacoco.exec文件。然后我上传到声纳。

我获得了单元测试覆盖率统计数据 - 而不是IT统计数据。我对结果并不感到惊讶。

但有人知道我在哪里做错了吗?

1 个答案:

答案 0 :(得分:0)

您已经使用jacoco为您的单元测试覆盖做了一些努力。我会继续努力使这个解决方案有效,也许可以在这里解决你的困难。

我建议尝试在两个覆盖率报告中使用jacoco,因为只能使用jacoco分析Integration-Coverage,您可以在此处阅读:

http://www.sonarqube.org/measure-coverage-by-integration-tests-with-sonar-updated/

我已经查阅了sonarqube和配置网站的文档,但没有找到使用不同覆盖插件的可能性。

您可以找到相关文档 单位测试覆盖范围:http://docs.codehaus.org/display/SONAR/Code+Coverage+by+Unit+Tests+for+Java+Project

和Int-Test-Coverage:http://docs.codehaus.org/display/SONAR/Code+Coverage+by+Integration+Tests+for+Java+Project