java - Gradle CreateDebugCoverageReport 不运行本地单元测试

标签 java android unit-testing

我正在使用 jacoco 进行代码覆盖。它运行良好 (./gradlew createDebugCoverageReport) 并为所有 androidTest 案例生成代码覆盖率。但是,它不运行本地单元测试,因此不计算这些测试的代码覆盖率。我怎样才能实现所有测试用例,包括本地运行和所有代码覆盖。我不确定我错过了什么。任何指针都会很棒。

我可以使用 ./gradlew testDebugUnitTest 在 JVM 上成功运行所有本地单元测试

如果需要更多信息,请告诉我。

最佳答案

Android Studio Chipmunk 和 Gradle 7.3.3 的更新答案

这是项目级别的gradle

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

这些在模块级别的gradle中

plugins {
    id 'jacoco'
}
android {

    buildTypes {
        debug {
            testCoverageEnabled true
        }
    }

    tasks.withType(Test) {
        jacoco {
            includeNoLocationClasses = true
            excludes = ['jdk.internal.*']
        }
    }

}

最后,运行测试的任务。

task jacocoTestReport(type: JacocoReport, dependsOn: ['testDebugUnitTest', 'createDebugCoverageReport']) {
    reports {
        xml.getRequired().set(true)
        html.getRequired().set(true)
    }

    def fileFilter = [
            '**/R.class',
            '**/R$*.class',
            '**/BuildConfig.*',
            '**/Manifest*.*',
            '**/*Test*.*',
            'android/**/*.*'
    ]
    def debugTree = fileTree(
            dir: "$project.buildDir/tmp/kotlin-classes/debug",
            excludes: fileFilter
    )
    def mainSrc = "$project.projectDir/src/main/java"

    sourceDirectories.from(files([mainSrc]))
    classDirectories.from(files([debugTree]))
    executionData.from(fileTree(
            dir: "$buildDir",
            includes: [
                    "outputs/unit_test_code_coverage/debugUnitTest/testDebugUnitTest.exec",
                    "outputs/code_coverage/debugAndroidTest/connected/*/coverage.ec"
            ]
    ))
    
}

"$project.buildDir/tmp/kotlin-classes/debug" 适用于 Kotlin。对于 Java,更改为 "$project.buildDir/intermediates/classes/debug"

testDebugUnitTest 运行单元测试并在 "outputs/unit_test_code_coverage/debugUnitTest/testDebugUnitTest.exec" 中创建覆盖率报告。 请注意,路径可能不同。我在应用程序文件夹中搜索“exec”找到了它。

createDebugCoverageReport 运行 Android 测试并在 "outputs/code_coverage/debugAndroidTest/connected/*/coverage.ec" 中创建覆盖率报告。请注意,此路径也可能不同。我在应用程序文件夹中搜索“coverage.ec”找到了它。

最后,要运行测试并创建覆盖率报告,您可以创建运行配置以运行“clean jacocoTestReport”或在 Android Studio 中按 ctrl 两次并运行“./gradlew clean jacocoTestReport”,这将为您创建运行配置.

关于java - Gradle CreateDebugCoverageReport 不运行本地单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38249722/

相关文章:

java - PMML文档解析

java - Acceleo 和 Xpand 有什么区别?

android - 如何使用 FFmpeg 在几秒钟之间剪切视频?

由于 V/GoogleSignatureVerifier : Signature not valid,Android 应用程序崩溃

objective-c - 使用 NSURLConnection 进行单元测试

c++ - C++ 中的单元测试如何在 printf 刚刚显示的源代码中访问我的结果

Java - JFrame 上只有两个圆角

java - groovy.lang.MissingPropertyException:无法为类型org.gradle.api.Project的项目 'versionKey'设置未知属性 ':flamingo'

java - 更新 Firestore 集合中找到的所有文档中的字符串字段

algorithm - 单元测试近似算法