标签: jacoco

JaCoCo 未根据源文件生成覆盖率报告 - 方法名称不可点击

我有一个 Maven 多模块项目,其中 JaCoCo 没有根据源文件生成报告。

通常,如果MyService是正在测试的类,它将以两种方式报告,一种通过MyService.html基于适当包的位置中的文件名和方法列表,以数字和图表的形式提供覆盖范围的整体图 - 列出所有方法在类中,每个方法都有一个指向另一个 html 的可点击链接,MyService.java.html其中包含带有红色/绿色/黄色背景的源代码以显示覆盖状态。

在我的场景中,只MyService.html生成而不是MyService.java.html和 方法在前者中列出并包含覆盖详细信息,但没有指向其他报告的超链接,如下所示。

在此处输入图片说明

问题在这里变得更有趣,我的 Maven 配置未在此模块中配置,但在父模块和其他子模块中能够正确生成报告。下面是maven插件配置供参考。

父 POM:

<plugin>
  <groupId>org.jacoco</groupId>
  <artifactId>jacoco-maven-plugin</artifactId>
  <version>${jacoco.version}</version>
  <configuration>
     <destFile>${project.basedir}/target/jacoco-unit.exec</destFile>
     <dataFile>${project.basedir}/target/jacoco-unit.exec</dataFile>
     <append>true</append>
  </configuration>
  <executions>
     <execution>
        <id>jacoco-initialize</id>
        <goals>
           <goal>prepare-agent</goal>
        </goals>
     </execution>
     <execution>
        <id>jacoco-site</id>
        <phase>package</phase>
        <goals>
           <goal>report</goal>
        </goals>
     </execution>
  </executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)

子POM:

    <plugin>
        <groupId>org.jacoco</groupId>
        <artifactId>jacoco-maven-plugin</artifactId>
    </plugin>
Run Code Online (Sandbox Code Playgroud)

尝试切换 JaCoCo 版本,但没有任何帮助,现在坚持使用最新的 0.8.2。Maven 是最新的 - 3.6.0。除此之外,子 pom 中配置的另一个插件是 PMD——它的存在与否对报告没有任何影响。

类似问题:Gradle JaCoCo 插件 - 报告中不可点击的类和方法名称

java maven jacoco jacoco-maven-plugin

6
推荐指数
1
解决办法
4381
查看次数

使用 gradle 和 kotlin DSL 配置 Jacoco

我正在尝试配置 Jacoco 以从分析中排除某些类,但找不到任何工作示例:(

我找到了一些样本,afterEvaluate但没有成功

gradle jacoco gradle-plugin gradle-kotlin-dsl

6
推荐指数
3
解决办法
4718
查看次数

错误 Spring 获取 Jacoco 覆盖率 端到端测试

我正在尝试使用基于 API 命中的 Jacoco 获得端到端测试覆盖率,而不是通过运行单元测试。我跟着这个教程:https : //dzone.com/articles/code-coverage-report-generator-for-java-projects-a

但是我收到了这个错误:

Caused by: java.lang.LinkageError: loader 'bootstrap' attempted duplicate class definition for java.lang.$JaCoCo. (java.lang.$JaCoCo is in module java.base of loader 'bootstrap')
Run Code Online (Sandbox Code Playgroud)

我不知道是什么导致了错误:该项目使用 gradle,我还应用了 jacoco 插件进行单元测试(我需要对单元测试和端到端测试进行覆盖)。

但我不确定这是否会导致,LinkageError因为如果我从 gradle 中删除所有与 jacoco 相关的东西,同样的错误仍然出现。

如何正确设置 jacoco 覆盖率以使用 gradle 进行端到端测试?如果不可能,有什么替代方法吗?

spring gradle jacoco

6
推荐指数
0
解决办法
261
查看次数

Jacoco 无法读取 .ec 文件

为了生成单元和 Ui 测试的代码覆盖率,我实现了这个jacoco.gradle脚本

apply plugin: 'jacoco'

jacoco {
    toolVersion = "0.8.5"
}

tasks.withType(Test) {
    jacoco.includeNoLocationClasses = true
}

project.afterEvaluate {
    android.applicationVariants.all { variant ->
        def variantName = variant.name
        def testTaskName = "test${variantName.capitalize()}UnitTest"
        def uiTestCoverageTaskName = "create${variantName.capitalize()}CoverageReport"

        tasks.create(
                name: "${testTaskName}Coverage",
                type: JacocoReport,
                dependsOn: ["$testTaskName", "$uiTestCoverageTaskName"]) {
            group = "Reporting"
            description = "Generate Jacoco coverage reports for the ${variantName.capitalize()} build."

            reports {
                html.enabled = true
                xml.enabled = true
            }

            def excludes = [
                    '**/R.class',
                    '**/R$*.class',
                    '**/BuildConfig.*',
                    '**/Manifest*.*',
                    '**/*Test*.*',
                    'android/**/*.*',
                    '**/*Application*.*', …
Run Code Online (Sandbox Code Playgroud)

android unit-testing code-coverage gradle jacoco

6
推荐指数
1
解决办法
1338
查看次数

Maven Surefire 插件与 Jacoco、JMockit 和 JDK14 的问题

我尝试将我的项目从 JDK 11 升级到 JDK 14,但在将 java 版本设置为 14 后运行测试失败。由于我将 jacoco 与 JMockit 结合使用,我配置了我的构建如下(编辑:JaCoCo 版本是 0.8.3 / 0.8.5,JMockit 版本 1.49):

    <build>
    <plugins>
        <plugin>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <version>${version.jacoco}</version>
            <executions>
                <execution>
                    <id>coverage-initialize</id>
                    <goals>
                        <goal>prepare-agent</goal>
                    </goals>
                </execution>
                <execution>
                    <id>coverage-report</id>
                    <phase>post-integration-test</phase>
                    <goals>
                        <goal>report</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>${version.surefire-plugin}</version>
            <configuration>
                <argLine>
                    @{argLine} -javaagent:"${settings.localRepository}"/org/jmockit/jmockit/${version.jmockit}/jmockit-${version.jmockit}.jar
                </argLine>
            </configuration>
        </plugin>
...
Run Code Online (Sandbox Code Playgroud)

如果我在 Java 版本设置为 11 的情况下运行 Maven,一切正常,但是当我将 Java 版本设置为 14 时,surefire 插件会抛出此错误:

[ERROR] java.lang.instrument.IllegalClassFormatException: Error while instrumenting sun/util/resources/cldr/provider/CLDRLocaleDataMetaInfo.
[ERROR]         at org.jacoco.agent.rt.internal_1f1cc91.CoverageTransformer.transform(CoverageTransformer.java:93)
[ERROR] sun.util.locale.provider.LocaleDataMetaInfo: Unable to load sun.util.resources.cldr.provider.CLDRLocaleDataMetaInfo …
Run Code Online (Sandbox Code Playgroud)

jmockit maven jacoco java-14

6
推荐指数
1
解决办法
1万
查看次数

lombok.config 上的 addLombokGenerateAnnotation 不会忽略 Jacoco 报告上的 Lombok 注释

lombok.config在根目录中创建了一个包含以下内容的文件:

config.stopBubbling = true
lombok.addLombokGeneratedAnnotation = true
Run Code Online (Sandbox Code Playgroud)

但 Lombok 生成的代码(Getters、Setters、Builders 等)仍然出现在我的 Jacoco 测试报告上。

Jacoco 版本是 0.8.6,Lombok 版本是 1.18.12。

如何从报告中删除 Lombok 代码?

java junit unit-testing lombok jacoco

6
推荐指数
1
解决办法
2万
查看次数

如何配置 Intellij 测试覆盖率以与 lombok 一起使用

我们最近将 lombok 添加到我们的项目中,但是它降低了 Intellij 中的测试覆盖率,因为它检测到 getter/setter 未经测试。

我们已经添加了 lombok.config 来添加 @Generate 注释,但是只有 JaCoCo 会忽略它们。这适用于 SonarQube,但在 Intellij 中使用 JaCoCo 作为覆盖运行器不起作用,因为它不适用于 powermock。到目前为止,我们发现的唯一解决方法是修改 pom.xml 以使用 JaCoCo 离线工具,运行 Maven 测试,然后手动导入测试覆盖率,但这不是一个非常干净的解决方案。

有没有办法让 Intellij 覆盖率运行程序忽略 @Generate 带注释的方法?如果失败,我们如何设置 JaCoCo 以便我们可以从 intellij 运行测试,而不必执行 Maven 测试解决方法?

intellij-idea lombok jacoco

6
推荐指数
0
解决办法
1934
查看次数

SonarQube 代码覆盖率无法解释 Android 项目上的 Kotlin 文件

以下是我的声纳属性片段:

sonarqube {
   properties{
      property "sonar.junit.reportPaths", "build/test-results/testDebugUnitTest/*.xml"
      property("sonar.coverage.jacoco.xmlReportPaths", "build/reports/jacocoTestReport.xml"
}
}
Run Code Online (Sandbox Code Playgroud)

Jacoco 配置和属性工作正常,我如何确认这一点?我创建了一个 java 类并为其编写了一个单元测试,sonarqube 识别了这一点并将其记录为代码覆盖率的一部分,而它基本上忽略了所有 Kotlin 文件测试。我继续将 kotlin 文件更改为 java,并为其编写了一个 UnitTest,是的,它被识别并添加为代码覆盖率的一部分,再次,kotlin 文件测试被忽略。

顺便说一句,下面是我的 Jacoco.gradle:

apply plugin: 'jacoco'

ext {
    coverageExclusions = [
            '**/*Activity*.*',
            '**/*Fragment*.*',
            '**/R.class',
            '**/R$*.class',
            '**/BuildConfig.*',
    ]
}

jacoco {
    toolVersion = '0.8.6'
    reportsDir = file("$buildDir/reports")
}

tasks.withType(Test) {
    jacoco.includeNoLocationClasses = true
    jacoco.excludes = ['jdk.internal.*']
}


tasks.withType(Test) {
    finalizedBy jacocoTestReport // report is always generated after tests run
}

task jacocoTestReport(type: JacocoReport, dependsOn: ['testDebugUnitTest']) {
    group = "Reporting" …
Run Code Online (Sandbox Code Playgroud)

android jacoco kotlin sonarqube

6
推荐指数
1
解决办法
2049
查看次数

生成 Jacoco 报告时排除 android Instrumentation 测试

我的 Android 应用程序中有多个模块。我需要在 CI/CD 管道中自动执行代码覆盖率报告,其中 \xe2\x80\x99t 没有物理/虚拟 Android 设备,并且无法附加设备。

\n

集成 Jacoco 来自 - https://github.com/gouline/android-samples/blob/master/jacoco/jacoco.gradle

\n

当我尝试通过 gradle 命令生成覆盖率报告时

\n
>> ./gradlew createDebugCoverageReport\n
Run Code Online (Sandbox Code Playgroud)\n

它失败并显示以下错误日志

\n
* What went wrong:\nExecution failed for task \':app:connectedDebugAndroidTest\'.\n> com.android.builder.testing.api.DeviceException: No connected devices!\n
Run Code Online (Sandbox Code Playgroud)\n

所以我尝试通过命令排除 gradle 任务 (connectdDebugAndroidTest)

\n
>> ./gradlew createDebugCoverageReport -x app:connectedDebugAndroidTest -x module1:connectedDebugAndroidTest\n
Run Code Online (Sandbox Code Playgroud)\n

出现如下错误 -

\n
> Task :module1:createDebugAndroidTestCoverageReport FAILED\n\nFAILURE: Build failed with an exception.\n\n* What went wrong:\nExecution failed for task \':vpn:createDebugAndroidTestCoverageReport\'.\n> java.io.IOException: No coverage data to process in directories [/Users/abc/ws/prjName/module1/build/outputs/code_coverage/debugAndroidTest/connected]\n …
Run Code Online (Sandbox Code Playgroud)

android gradle jacoco android-instrumentation

6
推荐指数
1
解决办法
998
查看次数

java.lang.LinkageError:加载程序“bootstrap”尝试使用 Java11 和 Jacoco 0.8.5 为 java.lang.$JaCoCo 重复类定义

在 Jenkins 中运行测试项目时出现以下错误

Caused by: java.lang.LinkageError: loader 'bootstrap' attempted duplicate class definition for java.lang.$JaCoCo. (java.lang.$JaCoCo is in module java.base of loader 'bootstrap')

Jacoco 在父 pom 和当前测试 pom 中定义,具有不同的目标。

父pom.xml

<build>
  <plugins>
    <plugin>
      <groupId>org.jacoco</groupId>
      <artifactId>jacoco-maven-plugin</artifactId>
      <version>0.8.5</version>
      <dependencies>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.13</version>
        </dependency>
      </dependencies>
      <executions>
        <execution>
          <id>validate-headless</id>
          <phase>validate</phase>
          <goals>
            <goal>prepare-agent</goal>
          </goals>
          <configuration>
            <skip>true</skip>
            <propertyName>failsafe.argLine</propertyName>
          </configuration>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>
Run Code Online (Sandbox Code Playgroud)

测试项目-pom.xml

<properties>
  <maven.repo.local>${user.home}/.m2/repository</maven.repo.local>
  <itCoverageAgent>-javaagent:${maven.repo.local}/org/jacoco/org.jacoco.agent/0.8.5/org.jacoco.agent-0.8.5-runtime.jar=destfile=${basedir}/target/jacoco-it.exec</itCoverageAgent>
</properties>

<build>
  <plugins>
    <plugin>
      <artifactId>maven-failsafe-plugin</artifactId>
      <configuration>
        <argLine>${failsafe.argLine} ${itCoverageAgent}</argLine>
        <testFailureIgnore>true</testFailureIgnore>
        <reuseForks>true</reuseForks>
      </configuration>
    </plugin>
  </plugins>
</build>

<profiles>
  <profile>
    <id>coverage</id>
    <build> …
Run Code Online (Sandbox Code Playgroud)

java maven jacoco java-11 jacoco-plugin

6
推荐指数
1
解决办法
4194
查看次数