通过Gradle命令

时间:2016-04-11 16:05:58

标签: android testing gradle build-automation

不使用JaCoCo,有没有办法通过Gradle命令在我的测试中运行代码覆盖?似乎没有Gradle任务运行覆盖范围的测试。我看到的唯一选项是Android Studio UI上的一个按钮,它将使用代码覆盖率运行我的测试。

理想情况下,我希望使用命令行中的代码覆盖率自动化我的测试并访问它生成的报告。

顺便说一下,我对JaCoCo没有任何反对意见。我只是想知道是否有办法在不使用库的情况下执行此操作。

编辑:Possibly related but didn't the solution did not work for me - testDebug对我来说不是一项任务。

编辑2:Google Issue Tracker这似乎与我的问题有关。一年多前开业。

编辑3:当尝试使用Jacoco时出现这也是一个问题... jacoco似乎没有提供从我的研究在src / test目录中进行单元测试的gradle任务。愿被证明是错的!

1 个答案:

答案 0 :(得分:2)

在对Gradle的工作方式进行了大量研究之后,我能够解决我的问题,并感谢here和github项目here等一些示例。我需要做一些调整才能使它与我的项目一起工作,但结果是我可以在命令行的src / test /目录中的JUST我的单元测试中运行代码覆盖,并访问这些生成的报告。

这是我的build.gradle中的任务:

rsyslog

我需要进行的更改:单独运行单元测试由gradle任务task jacocoReport(type: JacocoReport, dependsOn: 'testMockDebugUnitTest') { group = 'Reporting' description = 'Generate Jacoco coverage reports after running tests.' reports { xml.enabled = true html.enabled = true } classDirectories = fileTree( dir: 'build/intermediates/classes/test/mock/debug', excludes: [ '**/R*.class', '**/BuildConfig*' ] ) sourceDirectories = files('src/main/java') executionData = files('build/jacoco/testMockDebugUnitTest.exec') doFirst { files('build/intermediates/classes/test/mock/debug').getFiles().each { file -> if (file.name.contains('$$')) { file.renameTo(file.path.replace('$$', '$')) } } } } 完成,testMockDebugUnitTest任务需要依赖我的单元测试首先完成。为我生成的构建树有点不同,所以我对其进行了硬编码.Jacoco所依赖的执行数据可以在jacocoReport任务生成的.exec文件中找到,该文件也需要定义。

毕竟说完了,我现在可以通过命令行分别从我的仪器测试中获得单元测试的代码覆盖率。