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

缺少单元测试覆盖率,但有单元测试统计信息

邹山
2023-03-14

我有一个詹金斯声纳装置,还有一个maven项目。这个maven项目只有一个pom,但包含java、javascript、html等。所以对于sonar来说,它是一个多模块项目,所以我可以获得每个部分的统计数据

我们还希望获得项目的代码覆盖率分析,这意味着我们需要在声纳分析之前运行测试并导出它们(至少从我收集的声纳跑步者不能做这种类型的分析)。

因此,我把詹金斯的工作设置为第一步做clean package,然后运行调用独立声纳分析作为第二步。我们有一个声纳项目。项目根目录中的属性文件,以及所有各种设置。这是:

sonar.projectKey=Project
sonar.projectName=Project
sonar.projectVersion=0.2.0-SNAPSHOT
sonar.projectDescription=Super Project
sonar.modules=project-java,project-web,project-js
project-java.sonar.dynamicAnalysis=reuseReports
project-java.sonar.core.codeCoveragePlugin=jacoco
project-java.sonar.dynamicAnalysis=reuseReports
project-java.sonar.junit.reportsPath=target/surefire-reports
project-java.sonar.jacoco.reportPath=target/coverage-reports/jacoco-ut.exec
project-java.sonar.projectName=project-java
project-java.sonar.language=java
project-java.sonar.projectBaseDir=.
project-java.sonar.sources=src/main/java
project-java.sonar.java.source=1.7
project-web.sonar.projectName=project-web
project-web.sonar.language=web
project-web.sonar.projectBaseDir=.
project-web.sonar.sources=src/main/webapp/partials
project-js.sonar.projectName=project-js
project-js.sonar.language=js
project-js.sonar.projectBaseDir=.
project-js.sonar.sources=src/main/webapp/js

现在,在我的pom中,我添加了以下内容(接下来是使用JaCoCo Maven插件为单元测试和集成测试创建代码覆盖率报告):

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.16</version>
    <configuration>
        <!-- Sets the VM argument line used when unit tests are run. -->
        <argLine>${surefireArgLine}</argLine>
        <!-- Skips unit tests if the value of skip.unit.tests property is true -->
        <!--<skipTests>${skip.unit.tests}</skipTests>-->
        <!-- Excludes integration tests when unit tests are run. -->
        <excludes>
            <exclude>**/IT*.java</exclude>
        </excludes>
    </configuration>
</plugin>   
<plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>0.6.4.201312101107</version>
    <executions>
        <!--
            Prepares the property pointing to the JaCoCo runtime agent which
            is passed as VM argument when Maven the Surefire plugin is executed.
        -->
         <execution>
             <id>pre-unit-test</id>
             <goals>
                 <goal>prepare-agent</goal>
             </goals>
             <configuration>
                 <!-- Sets the path to the file which contains the execution data. -->
                 <destFile>${project.build.directory}/coverage-reports/jacoco-ut.exec</destFile>
                 <!--
                    Sets the name of the property containing the settings
                    for JaCoCo runtime agent.
                -->
                 <propertyName>surefireArgLine</propertyName>
             </configuration>
         </execution>
         <!--
            Ensures that the code coverage report for unit tests is created after
            unit tests have been run.
        -->
         <execution>
             <id>post-unit-test</id>
             <phase>test</phase>
             <goals>
                 <goal>report</goal>
             </goals>
             <configuration>
                 <!-- Sets the path to the file which contains the execution data. -->
                 <dataFile>${project.build.directory}/coverage-reports/jacoco-ut.exec</dataFile>
                 <!-- Sets the output directory for the code coverage report. -->
                 <outputDirectory>${project.build.directory}/jacoco-ut</outputDirectory>
             </configuration>
         </execution>
    </executions>
</plugin>

因此,当我在本地运行mvn clean package时,一切都会运行,我可以转到目标目录,我会看到生成的报告(我知道sonar不使用这些报告,但其中包含代码覆盖信息)。现在,当声纳作业运行时,一切似乎都正常,但结果缺少单元测试覆盖率:

查看我发现的构建日志:

14:39:43.929 INFO  - Sensor JaCoCoSensor...
14:39:43.932 INFO  - Project coverage is set to 0% since there is no directories with classes.
14:39:43.932 INFO  - Sensor JaCoCoSensor done: 3 ms

我已经看到“项目覆盖率设置为0%”——杰科和詹金斯的声纳,并尝试了那里的建议,但没有成功。所以我假设我错过了另一个设置或者设置错误。

共有3个答案

齐弘业
2023-03-14

我有一个同样的问题:保险缺失。

但在我的项目中,添加org就足够了。jacoco:jacocomaven插件:为我的maven构建准备代理。

我不需要任何声纳和Jacoco配置(声纳与詹金斯在同一台机器上运行)1,只需调用:

clean org.jacoco:jacoco-maven-plugin:prepare-agent install -P integration-tests --fail-at-end

之后,sonar会通过jenkins sonar插件由后期构建操作调用。http://docs.codehaus.org/display/SONAR/ConfiguringSonarQube Jenkins插件

版本:

声纳插件

PS我在pom中配置了插件版本。

衡玄裳
2023-03-14

你能尝试一下mvn清洁安装吗?

顾喜
2023-03-14

我错过了一个叫做声纳的地方。二进制文件。所以我加了一行

project-java.sonar.binaries=target/classes

到属性文件,这就成功了。

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

  • 是否有人能够从Maven Build获得JaCoCo中JMockit和Powermock单元测试的复盖范围? 我有一个Powermock单元测试的现有测试集,我希望逐步将其迁移到JMockit。但是我需要能够在一个报告中看到所有单元测试的测试覆盖范围,最好是在Sonar中。 通过将JaCoCo置于“脱机”模式,我确实使JMockit和Powermock测试与Surefire/JaCoCo一起运行(

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

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

  • 我正在用pytest--cov测试我的代码,但是我的一个模块得到了0%的覆盖率。 该模块有一个类声明: 该测试执行以下操作: 测试覆盖率为0%-我做错了什么?

  • 我一直试图获得本地单元测试的代码覆盖率,但没有成功。 这里有一个关于我所说的本地单元测试的参考。 https://developer.android.com/training/testing/unit-testing/local-unit-tests.html 但这似乎无济于事。我是不是漏掉了什么? 注意,如果我通过Android Studio运行本地单元测试,一切都很好。我点击了我的“测试”模块