【问题标题】:How do I get SonarQube and Emma unit test coverage with Jacoco IT code coverage?如何通过 Jacoco IT 代码覆盖率获得 SonarQube 和 Emma 单元测试覆盖率?
【发布时间】:2014-05-11 03:15:27
【问题描述】:

当我的单元测试通过 Emma “覆盖”时,我正在尝试让 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.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 构建运行 Emma 单元测试(以 Emma 形式输出),然后运行 ​​IT 测试并输出到 jacoco.exec 文件。然后我上传到 Sonar。

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

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

【问题讨论】:

  • 感谢所有建议。最后,我所做的是删除了一些导致问题的崩溃 jmockit 测试,并以不同的方式重新实现它们。笔记。我的一些 jmockit 单元测试可以工作,而另一些则不行。我永远无法推测出 jmockit 给 jacoco 带来问题的模式。

标签: code-coverage sonarqube emma jacoco


【解决方案1】:

您已经在使用 jacoco 进行单元测试覆盖方面做出了一些努力。我会继续努力使该解决方案发挥作用,并可能在此处发布您的困难。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-12
    • 2014-04-06
    • 2018-10-18
    • 2016-04-07
    • 2019-08-04
    • 2018-11-13
    • 2016-01-31
    • 2012-01-18
    相关资源
    最近更新 更多