在某些博客中,我发现以下任务是生成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的新手,我希望详细了解此任务的每一步。以下是我的疑问:
创建新任务时 dependsOn:" testDebugUnitTest" 的功能是什么?即使我没有发表此声明,我仍然可以生成报告。
什么是testDebugUnitTest?怎么&它产生的地方?
模式之间有什么区别
' * * /R.class'和' * * / R $ * .class'
两者都是从报告中排除R文件然后有什么区别?
为什么R类和Android类的模式不同?
' * * /R.class' vs' android / * * / *。 *'
additionalSourceDirs& amp;源目录?根据文档,
来源设定应报告的覆盖范围。
答案 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文件然后是什么 区别?为什么R类和Android类的模式不同?
' * * /R.class' vs' android / * * / *。 *'
additionalSourceDirs& amp;资源 目录?根据文档,两者的描述相同 来源设定应报告的覆盖范围。
什么是executionData& testDebugUnitTest.exec?是 testDebugUnitTest.exec autogeenerated以及为什么我们需要提到这个 ?