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

JaCoCo-SonarQube-没有关于每次测试覆盖率的信息

慕鸿波
2023-03-14

我使用JaCoCo进行代码覆盖。单元测试报告是用junit创建的,它们被正确地导入,因此单元测试信息被正确地显示出来。问题是,我得到了错误消息:没有关于每个测试覆盖率的信息。代码覆盖率显示单元测试、集成测试和整体覆盖率的值为0%。我检查了sonar项目中所有需要的信息,如二进制、src、测试等属性。

我使用的是:<br>-SonarQube 4.5.1<br>-SonarRunner 2.4<br<-MySQL<br}-junit 4.1.1<br>-jacoco 0.7.2<br>

jacoco.exec位于项目基本目录的文件/目标中。

下面你可以看到sonar-project.properties:从我的角度来看,所有必要的路径都设置正确。(即二进制、src、测试)

Comma-separated paths to directories with sources (required)
sonar.sources=src

compiled code
sonar.java.binaries=class

source code of unit tests 
sonar.tests=test/src

Comma-separated paths to files with third-party libraries (JAR files in the case of Java)
sonar.java.libraries=jar

Language
sonar.language=java

Encoding of the source files
sonar.sourceEncoding=UTF-8

Additional parameters
sonar.my.property=value

Set Project Base
sonar.projectBaseDir=C:/snapshots/steffen_latest/software/java

Tells SonarQube to reuse existing reports for unit tests execution and coverage reports
sonar.dynamicAnalysis=reuseReports

JUnit path
sonar.surefire.reportsPath=test/report/junit

Tells SonarQube where the unit tests execution reports are
sonar.junit.reportsPath=test/report/junit

Tells SonarQube that the code coverage tool by unit tests is JaCoCo
sonar.java.coveragePlugin=jacoco

Import JaCoCo code coverage report.
Tells SonarQube where the unit tests code coverage report is
Unit Tests Coverage
sonar.jacoco.reportPath=target/jacoco.exec

Tells SonarQube where the integration tests code coverage report is
sonar.jacoco.itReportPath=target/it-jacoco.exec

这是来自声纳运行器的日志文件:

13:56:05.883 INFO  - Sensor SurefireSensor...
13:56:05.883 INFO  - parsing C:\work\snapshots\steffen_latest\software\java\test\report\junit
13:56:06.149 INFO  - Sensor SurefireSensor done: 266 ms
13:56:06.149 INFO  - Sensor JaCoCoItSensor...
13:56:06.195 INFO  - Analysing C:\work\snapshots\steffen_latest\software\java\target\it-jacoco.exec
13:56:06.726 INFO  - **No information about coverage per test**.
13:56:06.726 INFO  - Sensor JaCoCoItSensor done: 577 ms
13:56:06.726 INFO  - Sensor JaCoCoOverallSensor...
13:56:06.851 INFO  - Analysing C:\work\snapshots\steffen_latest\software\java\.sonar\jacoco-overall.exec
13:56:07.178 INFO  - **No information about coverage per test**.
13:56:07.178 INFO  - Sensor JaCoCoOverallSensor done: 452 ms
13:56:07.178 INFO  - Sensor JaCoCoSensor...
13:56:07.209 INFO  - Analysing C:\work\snapshots\steffen_latest\or_base\software\java\target\jacoco.exec
13:56:07.521 INFO  - **No information about coverage per test**.
13:56:07.521 INFO  - Sensor JaCoCoSensor done: 343 ms
13:56:07.521 INFO  - Sensor CPD Sensor (wrapped)...
13:56:07.521 INFO  - JavaCpdEngine is used for java
13:56:07.521 INFO  - Cross-project analysis disabled
13:56:09.019 INFO  - Sensor CPD Sensor (wrapped) done: 1498 ms
13:56:09.144 INFO  - Execute decorators...
13:56:16.166 INFO  - Store results in database

有人能给我一个建议吗?可能是什么问题?既然我不知道问题出在哪里...几天来我一直在研究这个问题,我真的不知道该怎么办..

提前谢谢你。

共有3个答案

佘单鹗
2023-03-14

在我的情况下,以下命令有效。

mvn clean org.jacoco:jacoco-maven-plugin:0.7.3.201502191951:prepare-agent install
mvn sonar:sonar 

要检查代码覆盖率:启动SonarQube服务器 -

仅供参考:我的SonarQube版本 - 5.1.2。您可以从SonarQube下载下载最新版本

子车俊材
2023-03-14

通过这个Maven配置,我可以看到每个测试数据的覆盖率。

您需要配置sonar jacoco侦听器以获得每次测试的覆盖率。

请注意,它已被sonar弃用:“此功能在SonarQube级别已弃用,将不再接受进一步的改进/维护。

    <skipTests>false</skipTests>
            <!--Jacoco settings -->
            <jacoco.haltOnFailure>false</jacoco.haltOnFailure>
            <jacoco.skip>false</jacoco.skip>

            <!-- sonar JACOCO properties -->
            <sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>
            <sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>
            <sonar.jacoco.reportPaths>${project.reporting.outputDirectory}/jacoco-ut.exec</sonar.jacoco.reportPaths>
            <sonar.language>java</sonar.language>


<!-- Added for Jacoco -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.12.4</version>
                <configuration>
                  <properties>
                    <property>
                      <name>listener</name>
                      <value>org.sonar.java.jacoco.JUnitListener</value>
                    </property>
                  </properties>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>0.8.1</version>
                <configuration>
                    <destFile>${sonar.jacoco.reportPaths}</destFile>
                    <append>true</append>
                </configuration>
                <executions>
                    <execution>
                        <id>agent</id>
                        <goals>
                          <goal>prepare-agent</goal>
                        </goals>
                      </execution>
                </executions>
            </plugin>



        <dependency>
            <groupId>org.jacoco</groupId>
            <artifactId>org.jacoco.agent</artifactId>
            <version>0.8.1</version>
            <classifier>runtime</classifier>
        </dependency>
        <dependency>
          <groupId>org.codehaus.sonar-plugins.java</groupId>
          <artifactId>sonar-jacoco-listeners</artifactId>
          <version>1.2</version>
          <scope>test</scope>
        </dependency>
佘茂才
2023-03-14

您是否尝试过使用准备代理

mvn clean org.jacoco:jacoco-maven-plugin:prepare-agent install

此外,如果您的承保范围一直显示为0%,您可能需要遵循以下建议:

如果您的项目已经使用argLine来配置surefire-maven-plugin,请确保将argLine定义为属性,而不是插件配置的一部分。"

 类似资料:
  • 我正在尝试使用Sonarqube 7获得每个测试功能的覆盖范围。 我正在使用Jacoco-maven-plugin,我的测试正在使用JUnit 5运行。 我成功地在Sonarqube dashboard上获得了全局覆盖,但是我想更深入地了解哪些测试覆盖了我的类的哪些行。 我已经尝试了这里给定的配置,但是没有成功:我在日志中得到下面的消息“没有关于每个测试覆盖率的信息”。我看到这可以通过添加一个监听

  • 我正在使用蚂蚁,雅各布和声纳。当我运行我的构建时,Sonar 告诉我“没有关于每个测试的覆盖率的信息”,Sonar 仪表板上有我的覆盖率结果,但我无法向下钻取它们以查看代码。但是,Jacoco 生成的 HTML 报告确实包括向下钻取代码。这是我的覆盖任务: 我的声纳目标看起来像这样: 有谁知道我错过了什么?

  • 同时尝试执行声纳以导入jacoco it。使用JacoAgent在服务器上生成的exec文件。jar,我得到以下消息: [信息][09:54:32.420] 传感器传感器[信息][09:54:32.462]分析/詹金斯/乔布斯/..[信息] [09:54:51.385] 没有关于每个测试的覆盖率的信息。 我已经验证了jacococ-it.exec文件本身确实包含数据(385 MB ),所以它肯定是

  • SonarQube不再显示我用jacoco分析的项目的测试覆盖率。似乎SonarQube有了更新(我发现新规则的日期是5月19日)。我还假设,从那时起,不再评估使用jacoco maven插件收集的测试覆盖率。我见过类似问题的老问题,但那是4年前的事了:JaCoCo SonarQube不兼容版本1007 我将POM更新到最新的插件版本0.8.4,但无济于事。有什么想法吗?我需要在哪里更改一些东西,

  • 我想展示用Gradle 6.0构建的多项目Spring boot应用程序的测试覆盖范围。我们目前使用JUnit5。 SonarQube中的测试覆盖率为0%,尽管存在一些首次测试。 顶层项目(https://github.com/OpenReqEU/eclipse-plugin-vogella/blob/master/server/build.gradle)中的build.gradle文件有以下输入

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