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

雅各布不包括机器人测试覆盖范围 [重复]

干京
2023-03-14

在我的Android项目中,雅各布不包括机器人测试。我可以得到机器人浓缩咖啡和junit测试覆盖与哈科没有任何问题。

我确实看到了有关此问题的其他问题,所有答案都是升级jaco版本。我使用的是最新的雅各科版本 0.7.9

这是我的项目mainbuild.gradle

buildscript {

  dependencies {
    classpath 'org.jacoco:org.jacoco.core:0.7.9'

    classpath 'org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:2.6-rc1'
    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
   }
}

应用程序模块构建梯度。

apply plugin: 'jacoco'

android {
    testOptions {
      unitTests.all {
        jacoco {
           includeNoLocationClasses = true
        }
        includeAndroidResources = true
       }
     }
  }

共有1个答案

归翔
2023-03-14

我通过在gradle中为jacoco创建一个单独的任务来解决这个问题。

首先,您需要添加jaco插件。

apply plugin: "jacoco"

我没有像在上面的代码片段上那样添加任何依赖项。只需添加插件。

然后将testCoverageEnabletrue参数添加到buildTypes部分。

buildTypes {
    debug {
        testCoverageEnabled true
    }
}

在这个例子中,它仅用于调试,但我相信如果你添加它用于发布,它也应该工作。

最后,添加jacoco任务,如下所示;

task jacocoTestReport(type: JacocoReport, dependsOn: "testDebugUnitTest") {

    group = "Reporting"
    description = "Generate Jacoco coverage reports after running tests."
    reports {
        xml.enabled = true
        html.enabled = true
    }
    classDirectories = fileTree(
            dir: './build/intermediates/classes/debug',
            excludes: ['**/R*.class',
                       '**/*$InjectAdapter.class',
                       '**/*$ModuleAdapter.class',
                       '**/*$ViewInjector*.class'
            ])
    sourceDirectories = files(coverageSourceDirs)
    executionData = files("$buildDir/jacoco/testDebug.exec")
    doFirst {
        new File("$buildDir/intermediates/classes/").eachFileRecurse { file ->
            if (file.name.contains('$$')) {
                file.renameTo(file.path.replace('$$', '$'))
            }
        }
    }
}

使用该任务,您应该能够创建覆盖率报告。它将在构建文件夹中导出html格式的覆盖率报告。有关更多信息,请参阅本教程。

 类似资料:
  • 我有一个多模块项目,如下所示: 在这个项目中,服务客户端将实现对我正在调用的任何服务的调用,数据模块将只是数据类。目前,雅各科考虑了所有这些模块。有没有办法排除完整的模块,如数据模块或服务客户模块,因为在这两种情况下都不需要UTs?

  • 我正在运行我的selenium项目模块,它不是主项目的一部分,我用Jacoco maven插件和surefire插件运行selenium测试,Jacoco只给出了selenium项目的代码覆盖(exec文件),而不是整个项目...我需要如何配置我的Jacoco和Surefire以获得外部/整个项目覆盖??

  • Jacoco 是否为 API 的集成测试提供代码覆盖率?也就是说,我有一个在本地运行的应用程序实例,并且我有集成测试,其中我命中了正在运行的应用程序实例提供的api。在这种情况下,我是否可以使用 Jacoco 来获取在集成测试运行时覆盖了多少行正在运行的应用程序实例? 我已经尝试了Jacoco的maven插件的准备代理集成和报告集成目标。但它们给出的代码覆盖率为 0。我认为这是因为jacoco只测

  • 当我运行mvn干净测试时,我希望覆盖输出被写入目标/覆盖报告,但是当我打开index.html构建后它是空的。 我检查了以下内容,jacoco.exec文件存在,其中有一组类名-在覆盖率html中有一个链接“Sessions ”,当我单击它时,我看到一组我的类似乎已经被执行-当我运行maven命令时,我没有看到错误或警告 我很困惑为什么报告是空的。从我看到的所有例子来看,这似乎应该行得通。我错过了

  • 假设在下面的Maven项目结构中有和。 在IntelliJ IDEA中,有一个名为包和类的选项,可以将用于缩小代码覆盖率范围的数据包含在覆盖率中。 我想知道,例如,如果我想查看的覆盖率,我应该向本节添加哪些包?我认为,当我编写这个单元测试仅用于测试时,可以只将或其包添加到要包括在覆盖率数据部分的包和类中。那是真的吗?或者什么是正确的方法?

  • 我有一些使用try-with-resources的代码,在jacoco中,它只覆盖了一半。所有的源代码行都是绿色的,但我得到一个黄色的小符号,告诉我8个分支中只有4个被覆盖。 我无法弄清楚所有分支是什么,以及如何编写涵盖它们的代码。三个可能的地方抛出。这些是、和隐含的 不抛出任何异常, 我想不出任何其他案例,但我仍然只有8个案例中的4个。 有人能给我解释一下为什么它是8个中的4个,还有没有其他方法