标签: jacoco

配置sonar2.12的jacoco代理(多模块maven)

Sonar最新版本2.12集成了Jacoco插件,我想将它用于多模块项目的代码覆盖部分.

我有这样的结构

proj.com.parent
   proj.com.provider
   proj,com.test
Run Code Online (Sandbox Code Playgroud)

提供者项目的测试用例位于测试项目中.当我将声纳中的代码覆盖率插件设置为jacoco时,它执行正常,但组合代码掩盖不会出现在DashBoard上.我已经看到一个帖子,单个jacoco.exec文件可以解决问题,但我无法这样做.

我试图在下面的pom中配置以下内容

<profile>
        <id>sonar</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <configuration>
                          <argLine>-javaagent:${sonar.jacoco.jar}=destfile=${sonar.jacoco.reportPath}</argLine> 
                    </configuration>
                </plugin>
            </plugins>
        </build>
        <properties>
            <sonar.jacoco.reportPath>${basedir}/code-coverage/jacoco.exec</sonar.jacoco.reportPath>
            <sonar.jacoco.jar> C:\sonar-2.12\war\sonar-server\deploy\plugins\jacoco\META-INF\lib\org.jacoco.agent-0.5.3.201107060350.jar</sonar.jacoco.jar>
        </properties>
Run Code Online (Sandbox Code Playgroud)

但在maven命令行"mvn clean install"上我收到此错误:

无法在C:\ sonar-2.12\war\sonar-server\deploy\plugins\jacoco\META-INF\lib\org.jacoco.agent-0.5.3.201107060350.jar中找到Premain-Class清单属性.初始化期间发生错误VM代理程序库无法初始化:仪器

任何人都可以提供任何帮助吗?

maven jacoco

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

如何使用Gradle运行Jacoco for Android?

我正在尝试使用Gradle运行Jacoco以获取示例Android应用程序.我知道Android和Java插件都不能包含在内,所以我相信在运行测试生成jacoco.exec文件之前,应该为android代码进行预检测.但是,我在运行gradle构建文件时遇到了由java.lang.StackOverflowError引起的TargetInvocationException.错误是:本机方法中的致命错误:-javaagent的处理失败

这是我的build.gradle:

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:0.8.+'
    }
}
apply plugin: 'android'
apply plugin: 'jacoco'

android {
    compileSdkVersion 19
    buildToolsVersion "19.0.1"

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            res.srcDirs = ['res']
            java.srcDir file('src')
        }
    }
}

    sourceSets {
        unitTest {
            java.srcDir file('unitTest/src')
        }
    }

    configurations {
        unitTestCompile.extendsFrom runtime
        unitTestRuntime.extendsFrom unitTestCompile
        codeCoverage
    }

    repositories {
        mavenCentral()
    }

    dependencies {
        unitTestCompile files("$project.buildDir/classes/release")
        unitTestCompile 'junit:junit:4.11'
        unitTestCompile 'org.robolectric:robolectric:2.2'
        unitTestCompile 'com.google.android:android:4.0.1.2'
        codeCoverage 'org.jacoco:org.jacoco.agent:0.6.5.201403032054:runtime@jar'
    }

    tasks.whenTaskAdded { task ->
        if(task.name == 'unitTest'){ …
Run Code Online (Sandbox Code Playgroud)

android code-coverage gradle jacoco

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

EclEmma,Java8和Lambda - 没有关于lambda表达式的报道

我在Eclipse Luna下有一个Java项目,使用EclEmma 2.3.1.201405111647(最新版),它使用Jacoco 0.7.1,它支持Java 8,如更改日志中所述:

"2.3.1版(2014/05/11)

Fixed ASM 5.0.1 dependency conflicts with new ASM bundles in Eclipse 4.4 (GitHub #83).
Upgrade to JaCoCo 0.7.1 for full Java 8 support.
Run Code Online (Sandbox Code Playgroud)

我现在有以下toString:

  @Override
  public String toString() {
    // [BLOCK0]
    if (0 == value) {
      return "0B";
    }
    // [BLOCK1]
    final MutableLong val = new MutableLong(value);
    final StringBuilder sb = new StringBuilder();
    // [BLOCK2]
    Arrays.asList(TERA_BYTES, GIGA_BYTES, MEGA_BYTES, KILO_BYTES, BYTES).forEach(unit -> {
      // [BLOCK3]
      long divider = unit.toBytes(1);
      long n = val.longValue() …
Run Code Online (Sandbox Code Playgroud)

java-8 jacoco eclemma

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

如何从 jacoco.exec 生成 HTML 报告?

我们有一个包含子模块的 Maven 项目。有一个父 pom.xml 并且每个子项目都被制作成一个 war 文件。每个子模块都有单元测试用例和从 Jacoco 生成的报告。

现有报告显示单个模块的单元测试覆盖率,但我们需要在 Tomcat 上提供集成测试范围的代码覆盖率。我们所做的是在 Tomcat 文件夹中安装 jacoco 代理并将其配置为生成 jacoco.exec。当我使用 EclEmma 插件导入 jacoco.exec 时,我们会看到代码覆盖率。

有没有办法在没有源代码的情况下从独立的 jacoco.exec 生成报告?

eclipse jacoco jacoco-maven-plugin

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

Jacoco-忽略MyClass.1

如何在Jacoco涵盖范围中忽略* .1类?

我的POM中包含以下内容:

<execution>
  <id>JaCoco Coverage Enforcement</id>
  <phase>verify</phase>
  <goals>
    <goal>check</goal>
  </goals>
  <configuration>
  <dataFile>${project.build.directory}/coverage-reports/jacoco-unit.exec</dataFile>
  <excludes>
    <exclude>**/MyClass.**</exclude>
  </excludes>
  <rules>
    ...
  </rules>
</execution>
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下错误消息:

[警告] com.mypackage.MyClass.1类违反了规则:行覆盖率是0.00,但预期最小值是0.85

更新12/19

这是文件夹结构中的内容:

$ find . -iname 'MyClass*class'
./target/classes/com/mypackage/MyClass$1.class
./target/classes/com/mypackage/MyClass.class
Run Code Online (Sandbox Code Playgroud)

java jacoco jacoco-maven-plugin

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

为什么JaCoCo会看到我的JUnit而忽略我的Spock测试?

我有一个项目,使用JUnit形成简单的单元测试(test/java)和Spock来执行更复杂的数据驱动的单元测试(test/groovy).我用Gradle构建了这一切.

我的问题是生成JaCoCo报告会导致代码覆盖率非常低,因为它似乎只考虑了JUnit测试.我可以在IntelliJ,Pitest中一起运行这些测试,并且通过Gradle也可以找到所有测试并报告正确的线路覆盖范围.

(我需要JaCoCo设置我的GitHub盾牌)

如何让JaCoCo使用两个测试框架报告线路覆盖?

的build.gradle

group 'com.rox'
version '1.0-SNAPSHOT'

apply plugin: 'java'
apply plugin: 'groovy'
apply plugin: 'jacoco'
apply plugin: 'info.solidsoft.pitest'
apply plugin: 'application'

repositories {
    mavenCentral()
}

dependencies {
    compile group: 'org.codehaus.groovy', name: 'groovy-all', version: '2.3.11'
    compile group: 'junit', name: 'junit', version: '4.11'
    compile group: 'org.hamcrest', name: 'hamcrest-all', version: '1.3'
    compile group: 'org.spockframework', name: 'spock-core', version: '1.1-groovy-2.4-rc-1'
}

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath "info.solidsoft.gradle.pitest:gradle-pitest-plugin:1.1.4"
    }
}

task runDebugUI(type: JavaExec, …
Run Code Online (Sandbox Code Playgroud)

java junit gradle spock jacoco

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

班级的执行数据不匹配+ Jacoco

我使用Jacoco找到的单元测试代码覆盖率ANT但不生成报告,我得到这个错误序列:

[jacoco:report] Loading execution data file C:\JUnit\apache-ant-1.10.1\jacoco.ex
ec

[jacoco:report] Writing bundle 'Test' with 566 classes

[jacoco:report] Classes in bundle 'Test' do no match with execution data. For report generation the same class files must be used as at runtime.

[jacoco:report] Execution data for class com/!!/AccountDetails does not match.

[jacoco:report] Execution data for class com/!!/DataExtractorHelper does not match.

[jacoco:report] Execution data for class com/!!/WelcomeLetter does not match.

[jacoco:report] Execution data for class com/!!/WelcomeLetterABCD does not match.
Run Code Online (Sandbox Code Playgroud)

我已经阅读了这些答案,但似乎没有一个能帮助我解决问题。 …

java ant interpreter bytecode jacoco

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

JaCoCo + Mockito + Android测试:报告零覆盖率

我知道这个主题有很多问题(和答案),但我已经尝试了在SO和其他网站上找到的所有内容,而且我还没有找到一种方法让JaCoCo包括使用Mockito的Android测试的覆盖范围.

我的问题:我想使用JaCoCo生成单元测试和仪器测试(androidTest)的代码覆盖率.我正在使用Mockito来模拟一些课程.我在GitHub中找到了一个使用JaCoCo的样本并将其作为起点.

https://github.com/rafaeltoledo/unified-code-coverage-android

当我运行该示例中包含的自定义jacocoTestReport任务时,代码覆盖率报告已正确生成,代码覆盖率为100%.该报告包括单元测试和android测试.但是,该示例不使用Mockito(我需要),因此我将以下内容添加到app/build.gradle中

dependencies {
 ...
 androidTestCompile 'org.mockito:mockito-android:2.10.0'
}
Run Code Online (Sandbox Code Playgroud)

我在app/src/main/java/net/rafaeltoledo/coverage/Util.java中添加了一个名为Util的非常简单的Java类

public class Util {
    public int anIntMethod() {
        return 0;
    }
}
Run Code Online (Sandbox Code Playgroud)

并将以下简单测试添加到app/src/androidTest/java/net/rafaeltoledo/coverage/MainActivityTest.java中的现有android测试

@Test
public void utilMethod() {
    Util util = Mockito.mock(Util.class);
    Mockito.doReturn(10).when(util).anIntMethod();
    assertThat(util.anIntMethod(), is(10));
}
Run Code Online (Sandbox Code Playgroud)

当我再次运行jacocoTestReport时,代码覆盖率降至88%,并且报告实际上显示我的测试未涵盖Util类,即使我显然有一个练习该类的测试.

(我想添加报告的截图,但我没有足够的声誉,所以这里有一个覆盖报告和执行报告的链接,表明两个测试实际上都已执行)

版本信息:Gradle插件:2.3.3 Jacoco:0.7.8.201612092310 Android Studio:2.3.3 Android构建工具:25.0.2

这是Jacoco限制还是我做错了什么?

android mockito jacoco android-gradle-plugin android-instrumentation

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

Jacoco with gradle和kotlin没有创建jacoco.exec文件

我已经设置了一个基本的kotlin项目(空类,一个测试文件),并尝试使用gradle插件设置jacoco with gradle:https://docs.gradle.org/current/userguide/jacoco_plugin.html

当我运行测试时,一个测试通过,但是没有创建jacoco.exec文件.我错过了什么?我假设这些类永远不会得到检测,但似乎无法找到有关如何为jacoco设置build.gradle的更多信息.或者jacoco不能从kotlin创建的类文件?

group 'com.ronnev.filewatcher'
version '0.1'

buildscript {
    ext.kotlin_version = '1.1.61'

    repositories {
        mavenCentral()
    }
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath 'org.junit.platform:junit-platform-gradle-plugin:1.0.2'
    }
}

apply plugin: 'kotlin'
apply plugin: 'org.junit.platform.gradle.plugin'
apply plugin: 'jacoco'

repositories {
    mavenCentral()
    jcenter()
}

dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib-jre8:$kotlin_version"

    testCompile 'org.junit.jupiter:junit-jupiter-api:5.0.2'

    testRuntime 'org.junit.jupiter:junit-jupiter-engine:5.0.2'
}

jacoco {
    toolVersion = "0.7.9"
    reportsDir = file("$buildDir/jacoco/")
}

jacocoTestReport {
    classDirectories = files("${buildDir}/classes")

    reports {
        xml.enabled true
        csv.enabled false
        html.destination file("${buildDir}/jacoco/jacocoHtml")
    }
}

test {
    jacoco {
        append = …
Run Code Online (Sandbox Code Playgroud)

gradle jacoco kotlin

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

更新Gradle和构建工具后缺少Android JAVA字节代码

我正在使用Jacoco创建一份覆盖率报告,并且在更新Gradle和BuildTools版本之前一直工作良好。然后,我还原这些更改并重新工作。

Jacoco在以下位置查找.class文件:

$ {buildDir} /中间体/类/调试

这是app / build / intermediates / classes / debug。但我注意到,升级后该路径丢失了,中间体中间没有目录

我的配置正在工作:

项目级模块

classpath 'com.android.tools.build:gradle:3.1.4'
classpath 'io.fabric.tools:gradle:1.25.1'
Run Code Online (Sandbox Code Playgroud)

应用级模块

compileSdkVersion 27
buildToolsVersion "27.0.3"
Run Code Online (Sandbox Code Playgroud)

当更新时是这样的:

项目级模块

classpath 'com.android.tools.build:gradle:3.2.1'
classpath 'io.fabric.tools:gradle:1.25.4'
Run Code Online (Sandbox Code Playgroud)

应用级模块

compileSdkVersion 28
buildToolsVersion "28.0.3"
Run Code Online (Sandbox Code Playgroud)

我找不到有关该路径正在移动或正在发生的情况的任何参考

编辑

我的问题是,由于Java字节码(生成的.class文件)不存在,因此Jacoco无法创建覆盖率报告

android code-coverage gradle jacoco

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