标签: jacoco

Java8项目的SonarQube提供了jacoco-Exception

我刚刚下载了最新版本的SonarQube 4.3,然后尝试使用以下命令构建一个java-8项目:

  mvn clean install
  mvn sonar:sonar
Run Code Online (Sandbox Code Playgroud)

这给了我下面的例外.

谷歌搜索,我得到的印象这是一个应该修复的早期问题......?

http://sonarqube.15.x6.nabble.com/Sonar-analyze-Java-1-8-project-Failure-td5023663.html

http://jira.codehaus.org/browse/SONARJAVA-482

SonarQube 4.3是否支持java-8?

或者任何线索,有什么问题?

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:483)
        at sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:386)
        at sun.instrument.InstrumentationImpl.loadClassAndCallPremain(InstrumentationImpl.java:401)
Caused by: java.lang.RuntimeException: Class java/util/UUID could not be instrumented.
        at org.jacoco.agent.rt.internal_6effb9e.core.runtime.ModifiedSystemClassRuntime.createFor(ModifiedSystemClassRuntime.java:138)
        at org.jacoco.agent.rt.internal_6effb9e.core.runtime.ModifiedSystemClassRuntime.createFor(ModifiedSystemClassRuntime.java:99)
        at org.jacoco.agent.rt.internal_6effb9e.PreMain.createRuntime(PreMain.java:55)
        at org.jacoco.agent.rt.internal_6effb9e.PreMain.premain(PreMain.java:47)
        ... 6 more
Caused by: java.lang.NoSuchFieldException: $jacocoAccess
        at java.lang.Class.getField(Class.java:1690)
        at org.jacoco.agent.rt.internal_6effb9e.core.runtime.ModifiedSystemClassRuntime.createFor(ModifiedSystemClassRuntime.java:136)
        ... 9 more
FATAL ERROR in native method: processing of -javaagent failed
Exception in thread "main"
Run Code Online (Sandbox Code Playgroud)

java java-8 jacoco sonarqube

15
推荐指数
2
解决办法
8551
查看次数

运行单一测试以检查代码覆盖范围Jacoco Android

我正在使用./gradlew createDebugCoverageReport生成所有Android检测(Robotium)测试的代码覆盖率报告.但我需要运行所有测试才能获得覆盖率报告.如何指定执行单个测试(或单个测试类)并获取覆盖率报告?我在测试开发过程中对它进行了测试,一次运行所有测试的速度太慢了.

android jacoco

15
推荐指数
1
解决办法
872
查看次数

Jacoco覆盖率报告问题

我正在尝试定义位置,jacoco将为真实设备上运行的检测测试创建覆盖文件.

--debuggradle任务的运行中我看到这个日志:

[DEBUG] [org.gradle.api.Task] DeviceConnector 'Nexus 5X - 6.0.1': installing /home/martin/workspace/lib/my-lib/build/outputs/apk/my-lib-debug-androidTest-unaligned.apk
[INFO] [org.gradle.api.Task] Starting 1 tests on Nexus 5X - 6.0.1
[INFO] [org.gradle.api.Task]  de.my.lib.utils.UtilsTest testMyTest[Nexus 5X - 6.0.1] [32mSUCCESS [0m
[DEBUG] [org.gradle.api.Task] DeviceConnector 'Nexus 5X - 6.0.1': fetching coverage data from /data/data/de.my.lib.test/coverage.ec
[DEBUG] [org.gradle.api.Task] DeviceConnector 'Nexus 5X - 6.0.1': uninstalling de.my.lib.test 13:46:14.538
[DEBUG] [org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter] Finished executing task ':my-lib:connectedDebugAndroidTest'
Run Code Online (Sandbox Code Playgroud)

我尝试了三种方法来定义位置:

使用<instrumentation>清单文件中的标记不会改变任何内容.

<?xml version="1.0" encoding="utf-8"?>
<manifest
    package="de.my.lib.test"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <instrumentation
        android:name="android.support.test.runner.AndroidJUnitRunner"
        xmlns:tools="http://schemas.android.com/tools"
        android:targetPackage="de.my.lib.test"
        tools:replace="android:targetPackage">
        <meta-data
            android:name="coverage"
            android:value="true" />
        <meta-data …
Run Code Online (Sandbox Code Playgroud)

android code-coverage gradle jacoco test-coverage

15
推荐指数
1
解决办法
1278
查看次数

由于 lombok @Data,Sonarqube 的覆盖范围很广

我使用 jacoco 进行覆盖率报告。当我查看 jacoco 报告时,报道似乎很好。但是在 Sonarqube 中,覆盖率很低,因为它说@Data来自lombok 的注释不被测试覆盖。

已编译的类被标记为@Generated但它不会被声纳忽略。

如何排除@Data分析?

maven lombok jacoco sonarqube jacoco-maven-plugin

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

如何添加注释以从jacoco代码覆盖率报告中排除方法?

我有一些Java代码,我想从代码覆盖中排除.我该怎么做?我希望能够添加注释.有没有办法配置或扩展jacoco(在gradle中使用)来使用它?

例:

public class Something
{
    @ExcludeFromCodeCoverage
    public void someMethod() {}
}
Run Code Online (Sandbox Code Playgroud)

java junit code-coverage gradle jacoco

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

Kotlin JaCoCo - IllegalClassFormatException。请提供原始的非仪器类

我正在尝试获取 Android 应用程序模块的测试覆盖率报告并执行testVariantBuildTypeUnitTest任务。

尽管所有测试均已通过,但TEST-classNameTest.xml文件包含以下错误消息。仅当包含从 Kotlin 调用 Java 的方法时才会出现此错误。这个问题有什么解决办法吗?

**Caused by: java.lang.IllegalStateException: Cannot process instrumented class... Please supply original non-instrumented classes.
at org.jacoco.agent.rt.internal_f3994fa.core.internal.instr.InstrSupport.assertNotInstrumented(InstrSupport.java:238)
at org.jacoco.agent.rt.internal_f3994fa.core.internal.instr.ClassInstrumenter.visitField(ClassInstrumenter.java:56)
at org.jacoco.agent.rt.internal_f3994fa.asm.ClassVisitor.visitField(ClassVisitor.java:339)
at org.jacoco.agent.rt.internal_f3994fa.asm.ClassReader.readField(ClassReader.java:1111)
at org.jacoco.agent.rt.internal_f3994fa.asm.ClassReader.accept(ClassReader.java:713)
at org.jacoco.agent.rt.internal_f3994fa.asm.ClassReader.accept(ClassReader.java:401)
at org.jacoco.agent.rt.internal_f3994fa.core.instr.Instrumenter.instrument(Instrumenter.java:90)
at org.jacoco.agent.rt.internal_f3994fa.core.instr.Instrumenter.instrument(Instrumenter.java:108)
Run Code Online (Sandbox Code Playgroud)

我们有多模块 android 项目,因此我们使用这个自定义 Jacoco 任务来获取覆盖率报告:

project.afterEvaluate {

    (android.hasProperty('applicationVariants')
            ? android.'applicationVariants'
            : android.'libraryVariants')
            .all { variant ->
                def variantName = variant.name
                def unitTestTask = "test${variantName.capitalize()}UnitTest"

                def jacocoReportName = unitTestTask + project.name

                tasks.create(name: jacocoReportName, type: JacocoReport, dependsOn: [
                        "$unitTestTask"
                ]) …
Run Code Online (Sandbox Code Playgroud)

java android unit-testing jacoco kotlin

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

持续集成:确保新的提交包含在测试中

我正在开发一个项目,其中包含许多未包含在测试中的遗留代码.

有什么办法可以设置集成服务器来检查所有新提交是否都有最少量的测试(例如,覆盖率> 70%)?

基本上,我看到两个选项:

  1. 如果单元测试未涵盖已提交的更改,则会以某种方式将CI服务器设置为使构建失败.这将确保每个新代码都有测试,并且遗留代码的测试将随着每次更改而增加.
  2. 设置整个项目的覆盖阈值,如果提交后覆盖百分比减少,则构建失败.这样做的问题是,如果我删除一个包含100条指令的类并添加一个包含50条指令的新类,则覆盖百分比将会上升而不会编写任何测试.

我更喜欢选项1,因为它强制遗留代码中的更改进行单元测试.这应该会增加整体测试覆盖率.

现在我们使用Jenkins作为我们的CI服务器,使用JaCoCo作为测试覆盖.Maven用于构建项目,SVN是我们的主要源代码控制.

java continuous-integration code-coverage jenkins jacoco

14
推荐指数
1
解决办法
1775
查看次数

多模块Android项目中的全局代码覆盖:合并代码覆盖率报告(单元和UI测试)

我有一个Android应用程序,它由2个模块组成:

  • 应用 - 用户界面

  • 子模块 - 具有大部分业务逻辑

对于他们每个人,我都有一个gradle任务来验证代码覆盖率:

  • 应用程序:UI代码覆盖率(Espresso)

  • 子模块:单元测试代码覆盖率

作为客户端的要求,我需要合并这两个报告以获得应用程序的整体/全局代码覆盖率.

注意:我正在使用Gradle 3.1.2版.


App Gradle文件:

apply plugin: 'jacoco'

android {

   testBuildType "uiTest"

    ...

  buildTypes {
    debug {
        applicationIdSuffix ".debug"
        versionNameSuffix "-debug"
        debuggable true

        minifyEnabled false
        shrinkResources false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'


        matchingFallbacks = ['debug']
    }

    // TESTS

    // unitTest will be used to run unit tests.
    unitTest.initWith(buildTypes.debug) //Beware the buildType this depends on MUST be above on the gradle file
    unitTest {
        applicationIdSuffix ".unitTest"
        versionNameSuffix "-unitTest" …
Run Code Online (Sandbox Code Playgroud)

android jacoco android-espresso

14
推荐指数
1
解决办法
1661
查看次数

Sonar Maven插件:如何排除测试源目录?

我有一个带有Java源代码和Scala测试源的Maven项目.我Jacocoverify舞台上使用代码覆盖.当我尝试在验证阶段通过添加执行或运行来运行声纳目标时mvn verify sonar:sonar,我最终将Sonar添加两次测试目录:

  [INFO] [11:15:34.756] Test directories:
  [INFO] [11:15:34.756]   /Users/xxx/Documents/workspace/misc/xxx/src/test/scala
  [INFO] [11:15:34.756]   /Users/xxx/Documents/workspace/misc/xxx/src/test/scala/../scala
Run Code Online (Sandbox Code Playgroud)

这导致分析失败,出现以下错误:

Failed to execute goal org.codehaus.mojo:sonar-maven-plugin:2.1:sonar (default-cli) on project kv-mapper: Can not execute SonarQube analysis: Unable to read and import the source file : '/Users/xxxx/Documents/workspace/misc/xxx/src/test/scala/../scala/xxx/xxxxx/xxx/xxx/xxxxx/xxxxxx.java' with the charset : 'UTF-8'. Duplicate source for resource
Run Code Online (Sandbox Code Playgroud)

我的pom.xml(对于Sonar)看起来像这样.

    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>sonar-maven-plugin</artifactId>
        <version>${sonar.plugin.version}</version>
        <!-- no default executions -->
        <configuration>
            <sonar.core.codeCoveragePlugin>jacoco</sonar.core.codeCoveragePlugin>
            <sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>
            <sonar.language>java</sonar.language>
            <sonar.jacoco.itReportPath>
                ${basedir}/target/jacoco.exec
            </sonar.jacoco.itReportPath>
            <sonar.exclusions>
                **/test/*
            </sonar.exclusions>
        </configuration>
    </plugin>
Run Code Online (Sandbox Code Playgroud)

如何将Sonar配置为:

  • 完全排除test/scala目录?要么
  • 删除重复的目录?

maven-3 jacoco sonarqube

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

如何验证某些排除类和jacoco插件的最小覆盖率?

我需要使用新的jacoco任务检查最小覆盖率

jacocoTestCoverageVerification

此任务在3.4.1 gradle版本和jacoco插件> = 0.6.3中可用

我可以运行另一个生成带有分支覆盖率的html报告的任务,但现在我想使用该数字来使构建失败.

这是我的代码

buildscript {
    ext {
        ....
    }
    repositories {
        mavenCentral()
        maven {
            ....
        }
    }
    dependencies {
        .....
    }
}


apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'jacoco'

jar {
    baseName = "coverage-test"
}


dependencies {
    // my dependencies
}


eclipse {
    classpath {
         containers.remove('org.eclipse.jdt.launching.JRE_CONTAINER')
         containers 'org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8'
    }
}

wrapper {
    gradleVersion = '3.4.1'
}

jacoco {
    toolVersion = '0.7.9'
}

jacocoTestReport {
    reports {
        xml.enabled false
        csv.enabled false …
Run Code Online (Sandbox Code Playgroud)

gradle jacoco

13
推荐指数
2
解决办法
6795
查看次数