繁体   English   中英

摇篮| Jacoco任务| 测试报告

[英]Gradle | Jacoco Task | test report

在一些博客中,我找到了以下任务来生成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. 模式之间有什么区别

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

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

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

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

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

应报告覆盖率的来源集。

  1. 什么是executionDatatestDebugUnitTest.exec testDebugUnitTest.exec是否自动生成,为什么我们需要提到这一点?

创建新任务时,dependsOn:“ testDebugUnitTest”的功能是什么? 即使我不发表此声明,我仍然能够生成报告。

这样可以确保testDebugUnitTest在jacocoTestReport之前运行。 您通常会设置此类任务依赖项,因为一个任务取决于另一个任务的输出。 在这种情况下,您希望通过testDebugUnitTest运行测试,然后再尝试为它们生成报告。

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

什么是testDebugUnitTest? 它是如何产生的?

这是一个任务。 可以在构建脚本,父构建脚本中定义任务,也可以通过插件添加任务。 您显示的示例代码不会告诉我们该任务的来源。

话虽如此,Android插件似乎可以完成此任务。

模式之间有什么区别

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

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

为什么R类和Android类使用不同的模式?

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

不知道。 我不知道这是R类。 Android模式只是缩小了范围,因为它是基于Android类位于android文件夹中的某个位置而工作的。

AdditionalSourceDirs和源目录之间有什么区别? 根据文档,两者的描述相同

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

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

老实说,这个任务似乎没有很好的记录。

什么是executionData&testDebugUnitTest.exec? testDebugUnitTest.exec是否自动生成,为什么我们需要提到这一点?

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

创建新任务时,dependsOn:“ testDebugUnitTest”的功能是什么? 即使我不发表此声明,我仍然能够生成报告。

  • 这意味着您的任务调用依赖于其自身执行之前的任务。

什么是testDebugUnitTest? 它是如何产生的?

  • 这是预定义的作业,它将启动所有测试。

模式之间有什么区别

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

  • '* * /R.class'-在任何路径中具有R.class名称的文件
  • '* * /R$*.class'-名称中带有R前缀且任何路径中都带有.class扩展名的文件

两者都从报告中排除了R文件,那么有什么区别? 为什么R类和Android类使用不同的模式?

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

  • 'android / * * / *。 *'还排除了一些不同的文件,这些文件使该模式更加复杂

AdditionalSourceDirs和源目录之间有什么区别? 根据文档,两个来源集的描述是相同的,应该报告其覆盖率。

  • 没有不同。 如果有意义,应该将AdditionalSourceDirs用于第三方组件。

什么是executionData&testDebugUnitTest.exec? testDebugUnitTest.exec是否自动生成,为什么我们需要提到这一点?

  • executionData-要运行的一组测试

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM