Android Studio 中的 Jacoco 代码覆盖率

2023-12-19

我已经尝试安静地运行 Jacoco 测试覆盖有一段时间了。我已经尝试了这些主题中报告的几种可能的解决方案:

使用 JaCoCo Gradle 插件测试 Android 代码覆盖率 https://stackoverflow.com/questions/18358297/android-test-code-coverage-with-jacoco-gradle-plugin

如何使用 Android gradle 插件 0.10.0 或更高版本获取 jacoco 覆盖率报告? https://stackoverflow.com/questions/23795595/how-do-i-get-a-jacoco-coverage-report-using-android-gradle-plugin-0-10-0-or-high

我使用 genymotion 在模拟设备中运行测试。 这是我添加到 build.gradle 中的内容:

apply plugin: 'jacoco'

android{       
    jacoco {
        version "0.7.1.201405082137"
    }        
    buildTypes{
        debug{
                    testCoverageEnabled = true
        }
    }
}

jacoco {
    toolVersion "0.7.1.201405082137"
}

为了运行它,我使用类似的东西

./gradlew clean
./gradlew createFLAVOR_NAMEDebugCoverageReport

相关生成的文件/文件夹是:

/build/intermediates/coverage-instrumented-classes
/build/intermediates/jacoco
/build/outputs/code-coverage/connected/flavors/MyFlavor/coverage.ec

但是,没有@ build/reports/jacoco/test/html/index.html 或任何html 页面/代码覆盖率报告@ /build/outputs。

我还尝试创建一个专门的任务来构建覆盖率报告:

def coverageSourceDirs = [
    'src/main/java',
]

task jacocoTestReport(type: JacocoReport, dependsOn: "connectedAndroidTestFLAVOR_NAMEDebug") {
    group = "Reporting"
    description = "Generate Jacoco coverage reports after running tests."
    reports {
        xml.enabled = true
        html.enabled = true
    }
    classDirectories = fileTree(
        dir: './build/intermediates/classes/debug',
        excludes: ['**/R*.class',
                   '**/*$InjectAdapter.class',
                   '**/*$ModuleAdapter.class',
                   '**/*$ViewInjector*.class'
        ])
    sourceDirectories = files(coverageSourceDirs)
    executionData = files("$buildDir/jacoco/connectedAndroidTestMyFlavorDebug.exec")
    // Bit hacky but fixes https://code.google.com/p/android/issues/detail?id=69174.
    // We iterate through the compiled .class tree and rename $$ to $.
    doFirst {
       new File("$buildDir/intermediates/classes/").eachFileRecurse { file ->
            if (file.name.contains('$$')) {
                file.renameTo(file.path.replace('$$', '$'))
            }
        }
    }
}

Then ./gradlew 干净 and ./gradlew jacocoTestReport。输出与上面相同,因此没有包含覆盖率报告或任何其他覆盖率文件的 html 页面。

我目前正在使用 Android Studio v1.0.2 和最新的 gradle 版本。 我对 gradle 相当陌生,所以我可能在这里遗漏了一些基本的东西。

Thanks


在花了一整天的时间来解决这个问题之后,我发现了问题所在。与示例相反,我看到 testDebug 构建生成的文件不是 .exec 文件@$buildDir/jacoco/testDebug.exec.

使用我的 gradle 和 studio 版本生成的文件是 .ec @构建/输出/代码覆盖/连接/风味/myFlavor/coverage.ec

我没有找到任何与此相关的信息。这可能是最近的更改,但是,通过创建自定义 JacocoReport 任务并相应地更改executionData 变量,我已经解决了问题。 这是我的实现:

task jacocoTestReport(type: JacocoReport) {

  def coverageSourceDirs = [
        'src/main/java'
  ]

  group = "Reporting"
  description = "Generates Jacoco coverage reports"
  reports {
      xml{
          enabled = true
          destination "${buildDir}/reports/jacoco/jacoco.xml"
      }
      csv.enabled false
      html{
          enabled true
          destination "${buildDir}/jacocoHtml"
      }
  }

  classDirectories = fileTree(
          dir: 'build/intermediates/classes',
          excludes: ['**/R.class',
                     '**/R$*.class',
                     '**/BuildConfig.*',
                     '**/Manifest*.*',
                     '**/*Activity*.*',
                     '**/*Fragment*.*'
          ]
  )

  sourceDirectories = files(coverageSourceDirs)
  additionalSourceDirs = files(coverageSourceDirs)
  executionData = files('build/outputs/code-coverage/connected/flavors/smartcompanion/coverage.ec')
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android Studio 中的 Jacoco 代码覆盖率 的相关文章

随机推荐

  • 使用 Typescript+VSCode 调试 Node.js 异步/等待

    我检查了以下答案 Nodejs 7 的异步等待 https stackoverflow com questions 41347260 async await with nodejs 7 如何在 Visual Studio 代码中调试异步 等
  • 如何使用 lldb(或 gdb)调试 Clang 插件

    我想调试 Clang 插件 但是 我找不到有关 Clang 插件调试的信息 如果您知道如何调试 Clang 插件 您能告诉我这些信息吗 谢谢 只是一个小轮廓 因为我自己在自动取款机上尝试 我正在使用lldb 我目前可以停止在插件中的任何给定
  • 使用 NSFetchedResultsController 在空表上自定义单元格

    当我的 UITableView 为空时 我试图放置一个自定义的空单元格 我使用以下代码 NSInteger tableView UITableView tableView numberOfRowsInSection NSInteger se
  • api 和实现的单独 OSGI 捆绑是常见做法吗?

    我有一个带有依赖项的类 我想在不重新启动依赖项的情况下进行热部署 该类有一个接口 但只有一个具体实现 最初 我创建了一个导出接口的包 并使用未导出的激活器和实现类注册了实现 但是 如果我更新捆绑包 则在调用 PackageAdmin ref
  • Django 中的完整日历

    所以 我有一个预约模特 class Appointment models Model user models ForeignKey User date models DateField time models TimeField docto
  • 如何在 pubspec.yaml 中为 flutter 添加用户定义的变量?

    基本上我需要将版本和本地依赖项 URL 分配为用户定义的变量 并在路径中或我希望的任何位置分配相同的变量 示例如下 mydependancyPath D mylocalDependancy commonUtils path mydepend
  • 在 Matlab 中绘制样本的正态分布图

    我有100个采样数 我需要在matlab中绘制它们的正态分布曲线 这些采样数据的均值和标准差很容易计算 但是有没有绘制正态分布的函数呢 如果您有权访问统计工具箱 该功能histfit做我认为你需要的事情 gt gt x randn 1000
  • 如何保护 Android 锁屏应用程序的安全?

    想象一下以下情况 Android 手机上安装并配置了一些锁屏应用程序 设置一些 PIN 码或密码 该应用程序配置为启动后自动运行 我在 Android 10 上检查了这一点 手机重新启动后 操作系统加载时有一个时间窗口 但锁屏应用程序尚未运
  • 如何在 C# 中固定由 Marshal.AllocHGlobal() 分配的内存?

    如何固定由 Marshal AllocHGlobal 分配的内存 我的第一次尝试如下 int bytes 10 IntPtr ip Marshal AllocHGlobal bytes GCHandle iph GCHandle Alloc
  • 常规上传文件

    我正在尝试在 grails groovy 中编写文件和视频的上传器 因此 每次用户填写新表单时 控制器都会上传文件并将文件名与其他字段一起保存到数据库中 所以 这是保存过程 def save def streamInstance new S
  • 如何解决python中找不到文件的问题?

    我编写了一个程序 需要 python 文件所在目录中的文件 这些文件位于 python 文件所在的同一文件夹中 我无法在python脚本中写入文件的完整路径 我用的是 脚本中的方法但它给出错误 请帮我解决问题 这是我的代码 code roo
  • Unity - 窗口大小取决于屏幕大小

    我希望我的游戏具有 1 1 的宽高比 但放大到一定的比例 这意味着宽度和高度必须相同 但不能大于实际屏幕尺寸 最重要的是 为了确保像素大小一致 宽度和高度值必须是 2 的幂值 我在计算所需的值时没有遇到任何问题 int value 2 in
  • 如何使用 mongoDb 获取字符串中关键字出现的次数

    我正在下面的聚合中使用 search 运算符进行文本搜索 但是我想获取匹配关键字的出现次数 不仅仅是 mongo 提供的 textScore myCollection await MyCollection aggregate match t
  • 不使用 eval() 直接将 python 字符串转换为字节

    eval https nedbatchelder com blog 201206 eval really is dangerous html在处理未知字符串时使用似乎很危险 这正是我项目的一部分正在做的事情 对于我的项目 我有一个字符串 称
  • 如何在这个Helm模板函数中使用printf?

    我在我的中创建了这个 Helm 模板函数templates helpers yaml文件 它只是获取数组元素的值 index Values 部分 基于传入的环境 效果很好 Function to get min CPU units defi
  • 如何通过 Visual Studio/SSDT 将外部表添加到 Azure SQL DB

    我的问题是 如何开发使用外部表的数据库项目并将其部署到 Azure SQL DB 我正在使用 Visual Studio 2017 数据库项目来管理 Azure SQL 数据库 我一直遵循在 VS 中构建数据库的方式 然后点击发布按钮 效果
  • 使用 javascript 自动加载图像

    我正在使用此代码来构建画廊 window onload function var image document getElementsByClassName thumbnails 0 getElementsByTagName img var
  • iOS Safari 自动填充/自动完成部分不起作用

    我有一个带有表单的网络应用程序 允许用户输入他们的几个朋友的联系信息 当用户尝试使用在其中一个表单字段获得焦点时弹出的 自动填充联系人 选项时 所选联系人的信息将用于页面上的所有字段 而不是仅限于自动填充的字段组 当时有重点 我浏览了有关自
  • Gatsby.js 中带有 Markdown Remark 的自定义 frontmatter 变量

    我正在使用 Gatsbyjs 和 NetlifyCMS 构建一个网站 我已经开始使用这个启动器https github com AustinGreen gatsby starter netlify cms https github com
  • Android Studio 中的 Jacoco 代码覆盖率

    我已经尝试安静地运行 Jacoco 测试覆盖有一段时间了 我已经尝试了这些主题中报告的几种可能的解决方案 使用 JaCoCo Gradle 插件测试 Android 代码覆盖率 https stackoverflow com questio