当前位置: 首页 > 知识库问答 >
问题:

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

戚晨
2023-03-14

当我的单元测试通过Emma被“覆盖”时,我试图让Sonar IT代码覆盖为我工作。

我的情况:

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

(2)我进行了集成测试,简单地用不同的输入场景运行应用程序的核心服务器端部分(这是一个Spring web应用程序)。我想要它的代码覆盖报告。

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

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

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

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

这就是我所做的。我有一个单独的蚂蚁任务,它重新编译代码库(去除Emma工具),然后重新打包应用程序并针对我的集成测试运行jaco:coverage工具。

问题是..我的单元测试是基于Emma的..那么你如何告诉Sonar在Emma单元测试中使用Emma插件,在IT测试中使用Jacoco插件?这还能做到吗?

下面是我如何设置我的声纳属性:

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

我的蚂蚁构建运行艾玛单元测试(以艾玛形式输出),然后运行IT测试,并将输出输出到jaco.exec文件。然后我上传到声纳。

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

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

共有1个答案

壤驷瑾瑜
2023-03-14

您已经使用jacoco为您的单元测试覆盖做了一些努力。我会继续努力让这个解决方案发挥作用,也许会把你的困难贴在这里。

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

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

我已经咨询了sonarqube和配置网站的留档,没有发现使用不同覆盖插件的可能性。

您可以在此处找到单元测试覆盖率的留档:Java项目的单元测试http://docs.codehaus.org/display/SONAR/Code覆盖率

以及此处的Int-test覆盖率:通过Java项目的集成测试 http://docs.codehaus.org/display/SONAR/Code 覆盖率

 类似资料:
  • 新的一年 之前因为上家公司的经营出了问题,年前的大裁员,过了一个漫长的春节。 之后加入了新公司,然后正好赶上一个很紧急的项目,忙成狗,因此好久没更新文章了。 不过,我又回来啦! 前言 自动化测试,我们将使用karma和nightmare,内容会包括: 单元测试 e2e测试(放下一篇文章) 其实,单元测试一般用在写公共包的时候,比如通用的js函数库,通用的UI组件库。基本不太会在做业务项目的时候还使

  • 我可以在声纳获得单位测试覆盖率通过使用Jacoco工具的代码覆盖率,并使用其报告在声纳属性文件为'sonar.jacoco.report路径=.../Reports/report.exec'。如何通过使用RAD的默认插件获得SONAR中的单元测试覆盖率,该插件以. coveragedata、. Analysis和. html格式生成报告?

  • 我试图通过SonarQube API(Sonar Version4.1.2)检索单个类的单元测试代码覆盖率。一切都很好,当我直接进入声纳仪表板并进入一个类的覆盖选项卡时,我可以看到指标良好: 有人能告诉我通过声纳API接口检索相同/相似信息的正确调用吗?我已经查看了http://docs.sonarqube.org/display/sonar/metric+definitions上的文档,并且可以

  • 我正在将ANT构建转换为Maven。我不用声纳。 在Maven中,Jacoco似乎并没有报告单元测试本身的覆盖率,而ANT报告。我也一直在尝试为我的Maven build获得这个,但是我没有找到任何东西。 似乎我应该添加一个

  • [在这里输入图像描述][1][在这里输入图像描述][2]我知道很多人都有类似的问题。我展示了很多答案,尝试了在声纳网站上给出的示例代码。那个样品工作得很好。我还显示以下链接 maven 3.0.5 请帮我解决这个问题。 下面是父模块pom文件 我真的觉得这是jacoco或Sonarqube的bug。可能它不兼容Java8之类的东西。我几乎什么都试过了。sonar java插件2.5.1不推荐使用许

  • 我很难设置我的项目,以便SonarQube报告每个测试的测试覆盖率。 在声纳扫描仪的分析过程中,我只看到 在读取了JaCoCo执行数据之后。 这工作的要求是什么?显示每个测试覆盖范围的最小示例的外观如何。 我当前的环境如下所示: 声纳奎比 6.4 索纳贾瓦 4.12.0 声纳扫描仪 3.0.3 日食霓虹灯 埃克莱艾玛 3.0.0/雅可 0.7.9 我的测试项目如下所示: 如您所见,每个测试都存在执