gpt4 book ai didi

java - Android-Jacoco代码覆盖率忽略了Robolectric测试

转载 作者:行者123 更新时间:2023-12-03 05:59:30 25 4
gpt4 key购买 nike

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

我的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
}
}
}
}

通过此设置,我可以获得“覆盖率”报告,但是尽管在“src / test / java”中进行了Robolectric测试,但覆盖率为0%。

如果我在该文件中添加以下代码:
android {
testOptions {
unitTests.all {
jacoco {
includeNoLocationClasses = true
}
}
}
}

当Gradle尝试同步时,出现以下错误:

Error:No such property: includeNoLocationClasses for class: 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

我可以肯定我正在使用Android插件版本1.5运行Gradle 2.13

在我的应用程序Gradle文件中,我具有以下内容:
//...

apply from: 'jacoco.gradle'

//..

testOptions {
unitTests.returnDefaultValues = true
}

//...

debug {
testCoverageEnabled true
}

我用来运行coverage的命令是:

./gradlew createDebugCoverageReport



所以我想知道为什么尽管使用了正确的Gradle版本,但仍然出现includeNoLocationClasses错误?除此之外,在Jacoco没有在src / test.java中进行Robolectric测试的情况下,我可能做错了什么?

最佳答案

我没有完全看到build.gradle,但是要拥有该标志,您必须:

  • 使用 gradle 2.13+
  • 使用 jacoco 0.7.6.201602180812

  • 您确定使用了正确的 gradle 版本。因此,我认为问题仅在于使用了错误的 jacoco

    提及 jacoco {toolVersion = "0.7.6.201602180812"}不会影响 gradle DSL。您应该添加较新的 jacoco 插件:
    buildscript {
    repositories {
    jcenter()
    }

    dependencies {
    classpath 'org.jacoco:org.jacoco.core:...'
    }
    }

    并且您应该应用已经在做的插件:
    apply from: 'jacoco'

    完成这样的配置后,您不再需要 jacoco {toolVersion = "..."}了。

    注意:考虑更新到较新的 android gradle 插件, 2.2.x已经稳定。 jacoco 也已经有了较新的版本 0.7.7.201606060606
    另外请注意:如果您在Android Studio中看到原始问题,请检查默认情况下是否使用包装器,并确保包装器指向gradle 2.13

    关于java - Android-Jacoco代码覆盖率忽略了Robolectric测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42618572/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com