标签: jacoco

"项目覆盖率设置为0%" - JenCo的JaCoCo和Sonar与Ant

我将我的工作从单个Hudson机器转移到多从属Jenkins环境,现在JaCoCo覆盖不再有效.

工作(旧):Hudson 2.0.1,Jenkins Sonar插件1.7.1,声纳2.1.2

BROKEN(新):Jenkins 1.446,Jenkins Sonar Plugin 1.7.2,Sonar 2.1.2

我的Hudson工作被称为Pinnacle,它曾经在同一台机器上使用Sonar在单个Hudson服务器上运行.我通过执行以下操作来设置我的(NO MAVEN)构建.

1)在我的build.xml中添加了一个Ant目标 test-with-coverage

2)在Hudson中配置Pinnacle作业以"使用以下属性调用独立声纳分析":

sonar.projectKey=com.skyboximaging:pinnacle
sonar.projectName="Pinnacle"
sonar.projectVersion=1.0
sources=Pinnacle/src/java
tests=Pinnacle/test/java
binaries=Pinnacle/classes
sonar.jacoco.reportPath=Pinnacle/jacoco.exec
sonar.jacoco.antTargets=test-with-coverage
Run Code Online (Sandbox Code Playgroud)

(请注意,代码将签出到Jenkins作业工作区的Pinnacle目录中.)

3)配置声纳"常规设置"以使用JaCoCo进行代码覆盖

一切都很美妙!

但是在新的Jenkins环境中,我在Jenkins构建输出中看到了这个错误:

23:15:17.863 INFO  Sensor JaCoCoSensor...
23:15:17.868 INFO  Project coverage is set to 0% as no JaCoCo execution data has been dumped: /var/lib/jenkins/workspace/Pinnacle/Pinnacle/jacoco.exec
Run Code Online (Sandbox Code Playgroud)

该文件在构建运行的从站上不存在.(目录/ var/lib/jenkins/workspace/Pinnacle/Pinnacle 确实存在.)

所有其他传感器(FindBugs,PMD等)似乎正常工作.只是JaCoCo坏了.

Sonar/JaCoCo甚至可以在多从属Jenkins环境中工作吗?

我怀疑Ant任务test-with-coverage没有运行.Sonar如何找到build.xml?新老装置有什么不同?

jenkins jacoco sonarqube

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

Jacoco代码覆盖项目的多种口味和模块

正如标题所说,这就是问题所在.我有一个带有模块的android风格的应用程序.该应用程序在android-studio和TeamCity服务器中使用gradle编译.我们有自定义任务来创建看起来像这样的代码覆盖:

task codeCoverageReport(type: JacocoReport) {
// Gather execution data from all subprojects
executionData fileTree(project.rootDir.absolutePath).include("**/build/jacoco/*.exec")

//Build class & source dirs
def classExcludes =['**/R.class',
                    '**/R$*.class',
        '**/BuildConfig.class',
        '**/*$InjectAdapter*.class',
        '**/*$ModuleAdapter*.class',
        '**/*$ViewInjector*.class']
sourceDirectories = files();
classDirectories = files();
subprojects.each{
    sourceDirectories += files(it.projectDir.absolutePath + '/src/main/java')
    def path1 = it.buildDir.absolutePath + '/intermediates/classes/debug'
    def path2 = it.buildDir.absolutePath + '/classes/main'
    classDirectories += fileTree(dir: path1, excludes: classExcludes, includes: ['**/*.class'])
    classDirectories += fileTree(dir: path2, excludes: classExcludes, includes: ['**/*.class'])
}

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

doFirst …
Run Code Online (Sandbox Code Playgroud)

android module gradle jacoco android-productflavors

7
推荐指数
0
解决办法
705
查看次数

Jacoco:无法读取执行数据文件,ant 任务

信息:java 版本:1.8.0_66 蚂蚁版本:1.9.6

我想做的事:

为在 AWS windows 2k12 服务器上运行的服务器代码提供代码覆盖率报告。

我做了什么:

  • 完全停止服务器。
  • 将 jacocoagent.jar 放入服务器的 bin 文件夹中。注意:这是在 Program Files 文件夹中
  • 将 -javaagent 设置附加到服务器启动期间使用的 JAVA_OPTS。
  • 启动服务器。
  • 从我的本地笔记本电脑运行我的示例测试。
  • 完全停止服务器。这产生了一个 184kb 的 jacoco.exec。
  • 将我的 build.xml 复制到 jacoco.exec 所在的同一目录。C:/path/to/exec/jacoco.exec
  • 将 jacocoant.jar 复制到 C:/path/to/jacocoant.jar
  • cd 进入 C:/path/to/exec/ 并运行命令“ant”

结果:

出现错误无法读取执行数据文件 C:/path/to/exec/jacoco.exec

构建.xml:

<project name="Example" default="rebuild" xmlns:jacoco="antlib:org.jacoco.ant">

<description>
  Example Ant build file that demonstrates how a JaCoCo coverage report
  can be itegrated into an existing build in three simple steps.
</description>

<property name="result.dir" location="." />
<property name="result.classes.dir" …
Run Code Online (Sandbox Code Playgroud)

java ant code-coverage jacoco

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

Android - Jacoco代码覆盖忽略了Robolectric测试

尝试使用Jacoco在Android上的Robolectric测试中获得代码覆盖率,但它在创建报告时拒绝承认我的Robolectric测试.

我的jacoco.gradle文件如下:

apply plugin: 'jacoco'

jacoco {
    toolVersion = "0.7.6.201602180812"
}

project.afterEvaluate {

    android.applicationVariants.all { variant ->
        def name = variant.name
        def testTaskName = "test${name.capitalize()}UnitTest"

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

            classDirectories = fileTree(
                    dir: "${project.buildDir}/intermediates/classes/${name}",
                    excludes: ['**/R.class',
                               '**/R$*.class',
                               '**/*$ViewInjector*.*',
                               '**/*$ViewBinder*.*',
                               '**/BuildConfig.*',
                               '**/Manifest*.*']
            )

            sourceDirectories = files(['src/main/java'].plus(android.sourceSets[name].java.srcDirs))
            executionData = files("${project.buildDir}/jacoco/${testTaskName}.exec")

            reports {
                xml.enabled = true
                html.enabled = true
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

有了这个设置,我可以得到覆盖报告,但我得到0%的覆盖率,尽管在"的src/test/java下"有Robolectric测试.

如果我将以下代码添加到该文件:

android { …
Run Code Online (Sandbox Code Playgroud)

java testing android robolectric jacoco

7
推荐指数
1
解决办法
3833
查看次数

Jacoco:: 在控制台上打印的覆盖率百分比

运行后mvn jacoco:report如何在控制台上打印覆盖率?

我可以在浏览器中看到它,但希望它在 jenkins 中打印。

jacoco

7
推荐指数
1
解决办法
2507
查看次数

如何将 Kotlin 源码的测试报告上传到 Coveralls?

我想在 Travis 构建完成后自动将我的 Jacoco 测试报告上传到 Coveralls。它适用于 Java,但如何为 Kotlin 配置它?

错误信息

我可以在本地和 Travis 上生成 Jacoco 测试报告,但是当 Travis 尝试提交给工作服时,它会失败并显示消息

> Task :coveralls
No source file found on the project: "kotlin-template-project"
With coverage file: /home/travis/build/myname/myreponame/build/reports/jacoco/test/jacocoTestReport.xml
Run Code Online (Sandbox Code Playgroud)

Google 将我链接到 Gradle 插件实现,它显示了它在哪里抛出此消息,它告诉我(我认为)找到了 Jacoco 报告文件,但没有找到工作人员显然需要的源文件。

我试过的

因此,我尝试通过所有这些方式将工作服任务指向我的源文件:

coveralls {
    sourceDirs += allprojects.sourceSets.main.allSource.srcDirs.flatten()
    sourceDirs += files(sourceSets.main.kotlin.srcDirs).files.absolutePath
    project.extensions.coveralls.sourceDirs += project.sourceSets.main.kotlin.srcDirs
    sourceDirs += ['src/main/kotlin']
    jacocoReportPath = 'build/reports/jacoco/test/jacocoTestReport.xml'
    sourceDirs += ['src/test/kotlin']
    sourceDirs += ["${projectDir}/src/main/kotlin"]
}
Run Code Online (Sandbox Code Playgroud)

我也尝试添加sourceSets project.sourceSets.mainjacocoTestReport任务中。

项目设置

我的最小build.gradle文件:

plugins {

    id 'org.jetbrains.kotlin.jvm' …
Run Code Online (Sandbox Code Playgroud)

gradle jacoco kotlin coveralls gradle-kotlin-dsl

7
推荐指数
1
解决办法
858
查看次数

如何覆盖Kotlin生成的不必要的空检查?

考虑以下最小的Kotlin示例:

fun <U> someWrapper(supplier: () -> U): () -> (U) {
    return { supplier() }
}

fun foo(taskExecutor: TaskExecutor): Int {
    val future = CompletableFuture.supplyAsync(someWrapper {
        42
    }, taskExecutor::execute)
    return future.join()
}

@Test
public void shouldFoo() {
    assertThat(foo(), is(42));
}
Run Code Online (Sandbox Code Playgroud)

我在Jacoco中有分支覆盖规则,该规则对上面的代码失败,说someWrapper呼叫行未覆盖2个分支中的1个。不幸的是,对于我来说,排除所有someWrapper被调用的类不是一个选择。

查看反编译的Java代码:

public final int foo(TaskExecutor taskExecutor) {
    Object var10000 = WrappersKt.someWrapper((Function0)null.INSTANCE);
    if (var10000 != null) {
        Object var2 = var10000;
        var10000 = new Foo$sam$java_util_function_Supplier$0((Function0)var2);
    }

    Supplier var3 = (Supplier)var10000;
    Function1 var4 = (Function1)(new Function1(this.taskExecutor) { …
Run Code Online (Sandbox Code Playgroud)

code-coverage jacoco kotlin

7
推荐指数
1
解决办法
90
查看次数

Gradle Jacoco 插件报告零覆盖

在运行 Gradle 的 Jacoco 插件时,我在选定的一组类上报告的代码覆盖率为零。我已经确认所有测试这些类的单元测试都已成功运行。

非常有趣的是,Eclipse 中的 EclEmma 生成了正确的代码覆盖率结果。我已经确认两个工具都使用相同版本的 Jacoco。

我想弄清楚这两种工具之间的区别是什么?我是否需要 Gradle Jacoco 插件的附加配置。

编辑:我的 Gradle Jacoco 输出显示“类 com/.... 的执行数据不匹配”

更新:我在 Eclipse 中打开了 Jacoco 生成的 test.exec 文件。它显示了缺失覆盖率的类执行了 80% 的探测。

java code-coverage gradle jacoco eclemma

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

向 Jacoco 报告隐蔽coverage.ec 文件

我正在尝试为我的 Android 应用程序获取代码覆盖率,我注意到当测试失败时,不会生成 jacoco 报告,只会生成coverage.ec。

有谁知道如何将coverage.ec 文件转换为jacoco 报告?

这对我不起作用:Jacoco 将coverage.ec 转换为没有coverage.em 的报告

祝一切顺利!

约翰尼

android code-coverage jacoco test-coverage

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

有没有办法仅在新代码上获得单位覆盖率(例如来自 jacoco)?

我的假设场景是这样的:

  • 我已经运行了我的 junit 测试并生成了一个 jacoco 文件
  • 我的 git diff 显示我更改了 10 行代码

现在我的 git diff 和 jacoco 信息的交集是覆盖了更改的 10 行代码中的 7 行。即 - 我对新代码有 70% 的覆盖率。

但我必须手动解决这个问题。

我想要一种自动化的方法来计算覆盖了多少新代码行的百分比。

我的问题是:有没有办法只在新代码上获得单位覆盖率(例如来自 jacoco)?

(请注意,如果您运行扫描仪并使用 JSON API 询问任务结果,我知道sonarqube可以做到这一点analysis.mode=publish- 我正在寻找开发人员可以在本地运行的轻量级东西。)

unit-testing code-coverage jacoco jacoco-maven-plugin

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