Jacoco代码覆盖率报告显示0%覆盖率,但测试报告显示Android应用程序的正确数据

kuuvgm7e  于 2024-01-04  发布在  Android
关注(0)|答案(2)|浏览(305)

我一直在使用Jacoco生成代码覆盖率报告,并且工作正常。我的项目包含使用JUnit 5的单元测试。我使用“de.mannodermaus.android”插件在JUnit 5中编写测试。
最近我更新了下面的依赖关系-

App的Build.gradle文件-

  1. apply from: '../jacoco-config.gradle'
  2. apply plugin: "de.mannodermaus.android-junit5"
  3. androidTestImplementation "de.mannodermaus.junit5:android-test-core:1.3.0"
  4. androidTestRuntimeOnly "de.mannodermaus.junit5:android-test-runner:1.3.0"
  5. // (Required) Writing and executing Unit Tests on the JUnit Platform
  6. testImplementation "org.junit.jupiter:junit-jupiter-api:5.8.2"
  7. testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:5.8.2"
  8. // (Optional) If you need "Parameterized Tests"
  9. testImplementation "org.junit.jupiter:junit-jupiter-params:5.8.2"
  10. // (Optional) If you also have JUnit 4-based tests
  11. testRuntimeOnly "org.junit.vintage:junit-vintage-engine:5.8.2"
  12. testImplementation "junit:junit:4.13.2"

字符串

项目级Build.gradle文件-

  1. classpath "org.jacoco:org.jacoco.core:0.8.8"
  2. classpath "de.mannodermaus.gradle.plugins:android-junit5:1.8.2.1"


我已经创建了一个gradle文件,用于应用Jacoco更改和设置。该文件的主要内容如下。

jacoco-config.gradle

  1. apply plugin: 'jacoco'
  2. tasks.withType(Test) {
  3. jacoco.includeNoLocationClasses = true
  4. jacoco.excludes = ['jdk.internal.*']}
  5. jacoco {
  6. toolVersion = "0.8.8"
  7. reportsDir = file("$buildDir/JacocoReport")}
  8. android {
  9. buildTypes {
  10. debug {
  11. testCoverageEnabled = true
  12. }
  13. }
  14. testOptions {
  15. animationsDisabled true
  16. unitTests {
  17. includeAndroidResources = true
  18. returnDefaultValues = true
  19. }
  20. }
  21. }
  22. project.afterEvaluate {
  23. project.gradle.taskGraph.whenReady {
  24. testDebugUnitTest {
  25. ignoreFailures true
  26. }
  27. }
  28. def androidExclusion = [
  29. '**/BR.*',
  30. '**/R.*',
  31. '**/R$*.*',
  32. '**/BuildConfig.*',
  33. '**/Manifest*.*',
  34. '**/databinding/*.*'
  35. ]
  36. // Create coverage task ex: 'jacocoTestReport<Flavor>' depending on
  37. task "jacocoTestReport"(type: JacocoReport, dependsOn: ['testDebugUnitTest']) {
  38. group = "Reporting"
  39. description = "Generate Jacoco coverage reports on the testDebugUnitTest build."
  40. def javaClasses = fileTree(
  41. dir: "${project.buildDir}/intermediates/javac/debug",
  42. excludes: androidExclusion)
  43. def kotlinClasses = fileTree(
  44. dir: "${project.buildDir}/tmp/kotlin-classes/debug",
  45. excludes: androidExclusion)
  46. classDirectories.from = files([ kotlinClasses , javaClasses])
  47. def coverageSourceDirs = ["src/main/java"]
  48. getAdditionalSourceDirs().setFrom(files(coverageSourceDirs))
  49. getSourceDirectories().setFrom(files(coverageSourceDirs))
  50. getExecutionData().setFrom(fileTree(dir: project.projectDir, includes: ["**/*.exec", "**/*.ec"]))
  51. reports {
  52. xml.required = true
  53. html.required = true
  54. }
  55. }
  56. }


1.运行Jacoco gradle任务时,代码覆盖率报告显示0%覆盖率。x1c 0d1x
1.但是,测试结果报告是正确的,并分别显示成功和失败测试。

我已经检查了jacoco gradle文件的源路径和目标路径是正确的。此外,Java和Kotlin的类文件路径似乎是正确的。
我使用的是gradle plugin version 7.2.2distributionUrl 7.3.3
任何帮助都很感激。谢谢。

tp5buhyn

tp5buhyn1#

testCoverageEnabled false应该解决测试中的插装错误问题,如果测试通过但出现异常,请查看详细答案:https://issuetracker.google.com/issues/178015739#:text = go...%40gmail.com%3E-,%232,-Jan%2022%2C%202021

zqdjd7g9

zqdjd7g92#

我已经评论了androidExclusion的列表:

  1. def androidExclusion = [
  2. '**/BR.*',
  3. '**/R.*',
  4. '**/R$*.*',
  5. '**/BuildConfig.*',
  6. '**/Manifest*.*',
  7. '**/databinding/*.*'
  8. ]

字符串
覆盖率不再为0。
编辑:testCoverageEnabled必须是false

相关问题