使用 JaCoCo Gradle 插件测试 Android 代码覆盖率

2024-01-10

我是 Gradle 和 Android 测试新手,但我已经将我的 Android 项目转换为使用 Gradle 进行构建。

现在我正在尝试使用 Gradle 的 JaCoCo 插件对 Android 项目进行测试覆盖。

我已将以下内容添加到我的 build.gradle 文件中:

apply plugin: 'jacoco'

当我运行“gradle jacocoTestReport”时出现以下错误:

Task 'jacocoTestReport' not found in root project '<project name>'.

从文档中我应该也应用插件“java”,但它与插件“android”冲突。

有没有解决的办法?

提前致谢。


这是我的使用方式Jacoco:

buildscript {
  repositories {
    mavenLocal()
    mavenCentral()
  }
  dependencies {
    classpath 'com.android.tools.build:gradle:0.12.+'
    classpath 'org.robolectric:robolectric-gradle-plugin:0.11.+'
  }
}

apply plugin: 'com.android.application'
apply plugin: 'robolectric'
apply plugin: 'jacoco'

android {
  compileSdkVersion 20
  buildToolsVersion "20.0.0"

  defaultConfig {
    applicationId "YOUR_PACKAGE_NAME"
    minSdkVersion 10
    targetSdkVersion 20
    testHandleProfiling true
    testFunctionalTest true
  }
  buildTypes {
    debug {
      testCoverageEnabled false
    }
    release {
      runProguard false
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
    }
  }
  jacoco {
    version "0.7.1.201405082137"
  }
  packagingOptions {
    exclude 'META-INF/DEPENDENCIES.txt'
    exclude 'META-INF/LICENSE.txt'
    exclude 'META-INF/NOTICE.txt'
    exclude 'META-INF/NOTICE'
    exclude 'META-INF/LICENSE'
    exclude 'META-INF/DEPENDENCIES'
    exclude 'META-INF/notice.txt'
    exclude 'META-INF/license.txt'
    exclude 'META-INF/dependencies.txt'
    exclude 'META-INF/LGPL2.1'
    exclude 'META-INF/services/javax.annotation.processing.Processor'
    exclude 'LICENSE.txt'
  }
}

robolectric {
  include '**/*Test.class'
  exclude '**/espresso/**/*.class'

  maxHeapSize "2048m"
}

jacoco {
  toolVersion "0.7.1.201405082137"
}

// Define coverage source.
// If you have rs/aidl etc... add them here.
def coverageSourceDirs = [
    'src/main/java',
]

task jacocoTestReport(type: JacocoReport, dependsOn: "connectedDebugAndroidTest") {
  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/testDebug.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('$$', '$'))
      }
    }
  }
}


dependencies {
  androidTestCompile('junit:junit:4.11') {
    exclude module: 'hamcrest-core'
  }
  androidTestCompile('org.robolectric:robolectric:2.3') {
    exclude module: 'classworlds'
    exclude module: 'maven-artifact'
    exclude module: 'maven-artifact-manager'
    exclude module: 'maven-error-diagnostics'
    exclude module: 'maven-model'
    exclude module: 'maven-plugin-registry'
    exclude module: 'maven-profile'
    exclude module: 'maven-project'
    exclude module: 'maven-settings'
    exclude module: 'nekohtml'
    exclude module: 'plexus-container-default'
    exclude module: 'plexus-interpolation'
    exclude module: 'plexus-utils'
    exclude module: 'wagon-file'
    exclude module: 'wagon-http-lightweight'
    exclude module: 'wagon-http-shared'
    exclude module: 'wagon-provider-api'
    exclude group: 'com.android.support', module: 'support-v4'
  }
}

上面的代码还包含一个解决方法https://code.google.com/p/android/issues/detail?id=69174 https://code.google.com/p/android/issues/detail?id=69174.

更多细节:http://chrisjenx.com/gradle-robolectric-jacoco-dagger/ http://chrisjenx.com/gradle-robolectric-jacoco-dagger/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 JaCoCo Gradle 插件测试 Android 代码覆盖率 的相关文章

随机推荐

  • 如何在 cookie 中存储字符串并检索它

    我想将用户名存储在 cookie 中 并在用户下次打开网站时检索它 是否可以创建一个在浏览器关闭时不会过期的 cookie 我正在使用 asp net c 创建网站 我怎样才能阻止浏览器提供保存用户名和密码 写一个cookie HttpCo
  • GDB 7.6 STL 漂亮的打印与 gcc-4.8 和 mac os 10.9

    我正在努力获得所描述的漂亮印刷品here https sourceware org gdb wiki STLSupport在我的 Mac 上运行 gdb 我通过 macports 下载了最新的 gdb 并使用gcc 4 8 我加载了 gdb
  • 在 TypeScript 中设置所需的函数参数

    在下面的代码中 type NoArg void type OneArg x number void let noArg NoArg x number gt let oneArg OneArg gt 只有第一个赋值才会产生编译器错误 我理解为
  • 在 React.js 中的 render return() 中显示获取结果

    我的问题是关于如何在渲染 return 中显示数组结果 我提取了 API 现在得到的结果存储在数组中 我需要显示这个结果 但我尝试在返回值中使用 for 但它不起作用 我还尝试了 map 和map is undefined fetch ur
  • 即使设置 SameSite=None 后,Safari 也不发送 cookie;安全的

    我们的应用程序使用 cookie 来记住用户登录 我们进行的每次身份验证 API 调用 浏览器都会将服务器设置的 HTTPonly cookie 附加到 API 请求并获得身份验证 Mojave 发布后 这种行为似乎在 Safari 中被打
  • java: TreeSet 顺序

    通过这段代码我得到这个输出 TreeSet
  • 如何获取文件名的路径部分?

    我想在 MATLAB 中获取文件名的路径部分 例如dirname http en wikipedia org wiki Dirname and basename http en wikipedia org wiki Basename在Lin
  • 有什么方法可以解决 FileSystemInfo.Fullname 有时抛出的 PathTooLongException 吗?

    我的硬盘上有一些文件会引发PathTooLongException当我访问Fullname的财产FileSystemInfo目的 有什么办法可以解决这个问题 不包括重命名文件 这不是一个选项 http msdn microsoft com
  • 如何在 Puppeteer 中重新加载页面?

    每当页面无法正确加载或遇到问题时 我想重新加载页面 我试过page reload 但它不起作用 for const sect of sections Now collect all the URLs const appUrls await
  • JavaScript 作用域和闭包

    我正在尝试解决闭包问题 某处有一个笑话 我遇到了这个 function do cool stuff 这是如何运作的 将函数放在括号中的目的是什么 为什么后面的括号是空的 这样做的要点是 在很酷的东西中声明的任何变量都不会在全局命名空间中创建
  • 如何使用Entity Framework Code-First执行CRUD?

    我在更新和删除与 EF Code first 的多对多关系时遇到了很大的困难 我有一个相当简单的模型 public class Issue Key public int IssueId get set public int Number g
  • Colspan + 删除多列后单元格宽度相等

    附言 如果可能的话 我更喜欢用 CSS 来解决这个问题 但如果没有办法 我也可以使用 JQuery 但没有其他库 好的 这是一个扩展我之前的问题 https stackoverflow com questions 9115878 equal
  • 为什么不提供一个操作员? :在斯卡拉[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 子域的索引文件

    我终于能够设置子域 但现在当我尝试单独访问子域时遇到问题 例如 当我访问 sub domain com 时 我收到页面未找到错误 但是 当我访问 sub domain com index php 时 我会看到我的页面 我的理论是 当我访问
  • logcat 警告“ 下的未知元素:元数据”是什么意思?

    在运行新安装的应用程序时 我发现这个Warninglogcat 中的消息 W PackageManager 1233 Couldn t remove dex file for package at location data app xx
  • 在scapy中发送ICMP数据包并选择正确的接口

    我们可以对第 3 层 ICMP 数据包使用 srp 函数吗 我发现当我们制作 ICMP 回显请求数据包并使用 sr 发送 接收时 我们没有看到它从接口发送出去 因此目的地没有响应 但是 如果我们使用 srp 函数 我们会看到相同的数据包响应
  • 在 C++ 中调用 Visual Basic DLL,第 2 部分

    这个问题是上一个问题的后续问题 here https stackoverflow com questions 3679967 calling a visual basic dll in c 我从第三方供应商那里获得了一个用 Visual B
  • 如何正确使用fetch?

    我现在正在处理我的申请 我正在尝试使用 fetch 来登录页面 但即使阅读一些代码示例 我也不太明白如何使用 fetch 有人可以帮我得到吗 例如 我必须使用这些信息登录我的服务器 用户名 用户 密码 1234 然后我希望服务器返回登录成功
  • Flink REST API错误:请求与预期格式JarRunRequestBody不匹配

    尝试使用下面的 REST API 远程运行 Flink 作业 但抛出错误 curl X POST H Content Type application json data type object id urn jsonschema org
  • 使用 JaCoCo Gradle 插件测试 Android 代码覆盖率

    我是 Gradle 和 Android 测试新手 但我已经将我的 Android 项目转换为使用 Gradle 进行构建 现在我正在尝试使用 Gradle 的 JaCoCo 插件对 Android 项目进行测试覆盖 我已将以下内容添加到我的