Gradle | Jacoco任务|测试报告

时间:2018-04-22 08:41:13

标签: android gradle android-gradle 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. 模式之间有什么区别

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

    两者都是从报告中排除R文件然后有什么区别?

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

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

  5. additionalSourceDirs& amp;源目录?根据文档,

  6. 的描述相同
      

    来源设定应报告的覆盖范围。

    1. 什么是 executionData &的 testDebugUnitTest.exec ? testDebugUnitTest.exec是否已自动化,为什么我们需要提及这个?

2 个答案:

答案 0 :(得分:1)

  

dependsOn的功能是什么:" testDebugUnitTest"在创建新任务的同时?即使我没有说出这个陈述,我仍然可以生成报告。

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

BTW,我相信Jacoco通过检测编译器生成的类文件来工作。此工具生成Jacoco随后可以分析的数据,以确定是否调用方法。但是你需要执行代码才能获得数据,因此首先要运行测试。

  

什么是testDebugUnitTest?怎么&它产生的地方?

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

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

  

模式之间有什么区别

     

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

编译的内部和匿名类文件命名为' $ .class'。这只是确保Jacoco选择了内部和匿名课程。

  

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

     

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

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

  

additionalSourceDirs& amp;源目录?根据文档,两者的描述相同

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

additionalSourceDirectories似乎是针对未定义为源集的一部分的其他源目录。

老实说,这项任务似乎记录得非常糟糕。

  

什么是executionData& testDebugUnitTest.exec? testDebugUnitTest.exec是否已自动化,为什么我们需要提及它?

我猜测testDebugUnitTest.exec是通过调试单元测试运行检测类时生成的文件。 executionData是一种告诉JacocoReport任务在何处查找该文件的方法。但正如我所说,我采取了有根据的猜测。

答案 1 :(得分:0)

  

dependsOn的功能是什么:" testDebugUnitTest"而   创造一项新任务?即使我不说这句话,我仍然是   能够生成报告。

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

什么是testDebugUnitTest?怎么&它产生的地方?

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

模式之间有什么区别

     

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

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

两者都是从报告中排除R文件然后是什么   区别?为什么R类和Android类的模式不同?

     

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

  • ' android / * * / *。 *'还排除了一些不同的文件,这些文件构成了这种模式
  

additionalSourceDirs& amp;资源   目录?根据文档,两者的描述相同   来源设定应报告的覆盖范围。

  • 没有区别。如果有意义,additionalDourceDirs应该用于第三方组件。
  

什么是executionData& testDebugUnitTest.exec?是   testDebugUnitTest.exec autogeenerated以及为什么我们需要提到这个   ?

  • executionData - 这是一组要运行的测试