Android – Jacoco代码覆盖忽略了Robolectrictesting

试图在使用Jacoco的Android Robolectrictesting中获得代码覆盖率,但是在创build报告时,它拒绝承认我的Robolectrictesting。

我的jacoco.gradle文件如下:

apply plugin: 'jacoco' jacoco { toolVersion = "0.7.6.201602180812" } project.afterEvaluate { android.applicationVariants.all { variant -> def name = variant.name def testTaskName = "test${name.capitalize()}UnitTest" tasks.create(name: "${testTaskName}Coverage", type: JacocoReport, dependsOn: "$testTaskName") { group = "Reporting" description = "Generate Jacoco coverage reports for the ${name.capitalize()} build." classDirectories = fileTree( dir: "${project.buildDir}/intermediates/classes/${name}", excludes: ['**/R.class', '**/R$*.class', '**/*$ViewInjector*.*', '**/*$ViewBinder*.*', '**/BuildConfig.*', '**/Manifest*.*'] ) sourceDirectories = files(['src/main/java'].plus(android.sourceSets[name].java.srcDirs)) executionData = files("${project.buildDir}/jacoco/${testTaskName}.exec") reports { xml.enabled = true html.enabled = true } } } } 

有了这个设置,我可以得到Coverage报告,但是尽pipe在“src / test / java”中有Robolectrictesting,我仍然得到了0%的覆盖率。

如果我将下面的代码添加到该文件中:

 android { testOptions { unitTests.all { jacoco { includeNoLocationClasses = true } } } } 

Gradle尝试同步时遇到以下错误:

错误:没有这样的属性:类的includeNoLocationClasses:org.gradle.testing.jacoco.plugins.JacocoTaskExtension_Decorated

我知道我需要有Gradle 2.13使用这个includeNoLocationClasses值,所以在graddle-wrapper.properties我有以下几点:

 #Wed Apr 10 15:27:10 PDT 2013 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions-snapshots/gradle-2.13-20160228000026+0000-all.zip 

我相当肯定我正在运行Gradle 2.13与Android插件版本1.5

在我的应用程序Gradle文件中,我有以下几点:

 //... apply from: 'jacoco.gradle' //.. testOptions { unitTests.returnDefaultValues = true } //... debug { testCoverageEnabled true } 

我用来运行覆盖的命令是:

./gradlew createDebugCoverageReport

所以我想知道为什么尽pipe使用正确的Gradle版本,我得到includeNoLocationClasses错误? 除此之外,也许我正在做一些错误的地方,Jacoco并没有在src / test.java中进行Robolectrictesting?

Solutions Collecting From Web of "Android – Jacoco代码覆盖忽略了Robolectrictesting"

我没有看到你完全成立,但要在你的国旗必须:

  1. 使用gradle 2.13+
  2. 使用jacoco 0.7.6.201602180812

你确定你使用了gradle正确的版本。 所以,我认为,这个问题只是在使用错误的雅可比

提到jacoco {toolVersion = "0.7.6.201602180812"}不影响gradle DSL。 你应该添加更新的jacoco插件:

 buildscript { repositories { jcenter() } dependencies { classpath 'org.jacoco:org.jacoco.core:...' } } 

你应该应用插件,你已经在做:

 apply from: 'jacoco' 

经过这样的configuration,你不需要jacoco {toolVersion = "..."}更多。

注意:考虑更新到更新的Android gradle插件, 2.2.x已经稳定。 jacoco也有更新的版本0.7.7.201606060606

还有一点需要注意:如果您在Android Studio中看到原始问题,请检查您是否默认使用包装,并检查是否将包装指向gradle 2.13