android - Gradle | Jacoco 任务 |测试报告

标签 android gradle android-gradle-plugin jacoco gradle-plugin

在一些博客中,我发现了以下生成 jacoco 报告的任务:

task jacocoTestReport(type: JacocoReport, dependsOn: "testDebugUnitTest") {
    group = "Verification"
    description = "Generate Jacoco coverage reports after running tests."
    reports {
        xml.enabled = true
        html.enabled = true
    }

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

    additionalSourceDirs = files(coverageSourceDirs)
    sourceDirectories = files(coverageSourceDirs)
    executionData = files('build/jacoco/testDebugUnitTest.exec')
}

我是 Gradle 的新手,我想详细了解此任务的每个步骤。以下是我的查询:

  1. 创建新任务时 dependsOn: "testDebugUnitTest" 的功能是什么?即使我不放置此语句,我仍然能够生成报告。

  2. 什么是 testDebugUnitTest?它是如何以及在何处生成的?

  3. pattern有什么区别

    ' * */R.class' 和 ' * */R$*.class'

    两者都从报告中排除了 R 文件,那么有什么区别?

  4. 为什么 R 类和 Android 类的模式不同?

    '* */R.class' 与 'android/* */* 。 * '

  5. additionalSourceDirs 和源目录有什么区别?根据文档,两者的描述相同

Source sets that coverage should be reported for.

  1. 什么是executionData & testDebugUnitTest.exec? testDebugUnitTest.exec 是自动生成的吗?为什么我们需要提及它?

最佳答案

What is the functionality of dependsOn: "testDebugUnitTest" while creating a new task? Even if I don't put this statement, still I am able to generate the report.

这确保 testDebugUnitTest 在 jacocoTestReport 之前运行。您通常会设置此类任务依赖性,因为一个任务依赖于另一个任务的输出。在这种情况下,您希望在尝试为测试生成报告之前通过 testDebugUnitTest 运行测试。

顺便说一句,我相信 Jacoco 通过检测编译器生成的类文件来工作。该仪器生成数据,然后 Jacoco 可以分析这些数据以确定是否调用了方法。但是您需要执行代码才能获取该数据,这就是为什么要先运行测试。

What is testDebugUnitTest? How & where it's generated?

这是一个任务。任务可以在您的构建脚本、父构建脚本中定义或通过插件添加。您显示的示例代码没有告诉我们有关此任务来自何处的任何信息。

话虽如此,Android 插件似乎设置了这个任务。

What is the difference between the pattern

' * * /R.class' and ' * * /R$*.class'

编译后的内部和匿名类文件被命名为“$.class”。这只是确保 Jacoco 选取那些内部类和匿名类。

Why different pattern for R class and Android classes?

'* * /R.class' vs 'android/* * /* . * '

不知道。我不知道这个 R 类是什么。 Android 模式只是更窄,因为它的工作基础是 Android 类位于 android 文件夹中的某处。

What is the difference between additionalSourceDirs & source directories? As per the documentation, description is same for both

我不确定,但似乎sourceDirectories 是用于源代码集 的。请注意,该任务有一个 sourceSets() 方法。这将填充 sourceDirectories 文件集合。

additionalSourceDirectories 似乎用于未定义为源集一部分的其他源目录。

老实说,这个任务的记录似乎很糟糕。

What is executionData & testDebugUnitTest.exec? Is testDebugUnitTest.exec autogeenerated and why we need to mention this ?

我猜测 testDebugUnitTest.exec 是您通过调试单元测试运行检测类时生成的文件。 executionData 是一种告诉 JacocoReport 任务在哪里可以找到该文件的方法。但正如我所说,我正在做一个有根据的猜测。

关于android - Gradle | Jacoco 任务 |测试报告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49964080/

相关文章:

android - 安装Google Play服务时出错,我在做什么错?

google-maps - 找不到 MapActivity。安卓工作室 0.5.1

spring-boot - Spring Boot 项目中的 Liquibase 模块和变量

android - build.gradle文件冲突并在设备上创建两个完全相同的应用程序

android - Gradle 无法解析 com.google.android.gms :play-services-measurement:10. 0.1

android - 提供 gradle assembleRelease crashlyticsUploadDistributionRelease 的 apk 路径

安卓源错误

android - 生成签名的APK时如何解决依赖关系

android - 在android上获取类字节码

java - ObjectInputStream 无法正确转换对象