Jacoco Code Coverage在android studio中

我正在尝试生成Jacoco代码覆盖率报告。 我已经使用AndroidTestCase为我的testing类。

我发现使用testCoverageEnabled true和使用默认的android-studio默认jacoco,./gradlew connectedCheck或createDebugCoverageReport创build成功/失败testing用例的百分比,但没有覆盖报告。

然后我尝试了jacoco {toolVersion“0.7.1.201405082137”}和任务jacocoTestReport(types:JacocoReport,dependsOn:“testDebug”)。 我试图用各种任务来改变dependsOn值。 报告显示0(零)testing覆盖率,这是不可能的,因为所有类别中至less有一半被testing。

在过去的几天中,我遵循了堆栈溢出的各种可接受的答案。 结果是消极的。

我的gradle文件:

buildscript { repositories { mavenLocal() mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:1.0.0' } } apply plugin: 'com.android.application' apply plugin: 'jacoco' android { compileSdkVersion 21 buildToolsVersion "21.1.2" defaultConfig { applicationId "test.gradle.com.myapplicationtestgradle" minSdkVersion 21 targetSdkVersion 21 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile( 'proguard-android.txt'), 'proguard-rules.pro' } debug { testCoverageEnabled true } } jacoco { version "0.7.1.201405082137" } packagingOptions { exclude 'LICENSE.txt' } } jacoco { toolVersion "0.7.1.201405082137" } task jacocoTestReport(type:JacocoReport, dependsOn: "testDebug") { group = "Reporting" description = "Generate Jacoco coverage reports" // exclude auto-generated classes and tests def fileFilter = ['**/R.class', '**/R$*.class', '**/BuildConfig.*', '**/Manifest*.*', 'android/**/*.*'] def debugTree = fileTree(dir: "${project.buildDir}/intermediates/classes/debug", excludes: fileFilter) def mainSrc = "${project.projectDir}/src/main/java" sourceDirectories = files([mainSrc]) classDirectories = files([debugTree]) additionalSourceDirs = files([ "${buildDir}/generated/source/buildConfig/debug", "${buildDir}/generated/source/r/debug" ]) executionData = fileTree(dir: project.projectDir, includes: ['**/*.exec', '**/*.ec']) reports { xml.enabled = true xml.destination = "${buildDir}/jacocoTestReport.xml" csv.enabled = false html.enabled = true html.destination = "${buildDir}/reports/jacoco" } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) androidTestCompile('junit:junit:4.11') { exclude module: 'hamcrest-core' } } 

Solutions Collecting From Web of "Jacoco Code Coverage在android studio中"

我看到你已经有了它,但是,获取unit testing执行数据有一个更简单的方法。 我最近还在研究这个,我今天早些时候做了一个完整的写作。

在我的情况下,我不想创build额外的Gradle任务,因为我希望将报告生成为现有工作stream程的一部分。 我也不想明确地添加Jacoco插件,因为Google已经为工具testing的覆盖报告淹没了Jacoco Ant任务。

除了设置属性android.jacoco.versionbuildTypes.debug.testCoverageEnabled ,我testDebug JVM参数中添加了以下内容来生成执行数据:

 project.afterEvaluate { def append = "append=true" def destFile = "destfile=$buildDir/outputs/code-coverage/connected/coverage.ec" testDebug.jvmArgs "-javaagent:$buildDir/intermediates/jacoco/jacocoagent.jar=$append,$destFile" createDebugCoverageReport.dependsOn testDebug } 

这将unit testing执行数据附加到由connectedAndroidTest生成的覆盖文件,因此您的报告既反映了testingtesting,也反映了unit testing,而不是分别反映每个变体。

请注意, connectedAndroidTest覆盖coverage文件,请在创build报告时考虑这一点。 如果任务testDebug没有任何更改,并且运行createDebugCoverageReport ,则它只会反映您的Instrumentation Test覆盖范围。 所以,要改变你的unit testing。 尽pipe我还没有尝试过,但是Linux命令touch可能在这里很有用。

Gradle已经内置了对生成testing覆盖率报告的支持,我们不需要创build任何额外的configuration或添加任何插件来生成testing覆盖率报告。 基本上,我们唯一需要做的就是在build.gradle文件中将testCoverageEnabled参数设置为true ,如下所示:

 android { buildTypes { debug { testCoverageEnabled = true } } } 

接下来,我们可以从CLI执行下面的Gradle任务:

 ./gradlew createDebugCoverageReport 

在Windows上,我们可以像这样执行它:

 gradlew.bat createDebugCoverageReport 

任务将分析我们在/src/main/java/目录中的项目的代码以及放置在/src/androidTest/java/目录下的unit testing。 执行此任务后,我们可以在模块的以下目录中findtesting覆盖率报告:

 /build/outputs/reports/coverage/debug/ 

当我们打开index.html文件时,我们可以看到来自testing覆盖的可视化报告,可以在Web浏览器中查看。

它看起来如下图所示。

在这里输入图像说明

我已经写了一篇关于Android应用testing覆盖率报告的文章,并在前一段时间发布在我的博客上。 如果您对该主题感兴趣,可以阅读:

http://blog.wittchen.biz.pl/test-coverage-report-for-android-application/

更新(Robolectrictesting的unit testing覆盖率)

如果您希望使用Robolectric编写的unit testing创​​buildtesting覆盖率报告,并使用JacocoTravis CICodecov.io生成testing覆盖率报告,请查看我博客上的新文章:

http://blog.wittchen.biz.pl/test-coverage-report-with-travis-ci-for-robolectric-tests-on-android/

我完全删除了android studio,android sdk,gradle。 然后重新安装一切。 今天我完全删除了android studio,android sdk,gradle。 然后重新安装一切。 之后,我只是在应用程序build.gradle内添加。

 debug { testCoverageEnabled true } 

然后我运行./gradlew connectedChec。 一切都很完美。 Android工作室默认Jacoco为我工作的很好。 我认为也可以创build一个jacocoTestReport任务,然后创build代码coverage.I不知道为什么gradle和android studio以前不工作。

我调查正确的方法来获得与雅科科合并的代码覆盖率报告,你可以在这里检查: https ://gist.github.com/ultraon/54cca81ca159ed0a4a9ebf62e89c26ba

我用Gradle 3.2和Android Gradle Plugin 2.2.2使用AndroidStudio 2.2.2