我想在android项目中生成JUnit测试的代码覆盖率报告,所以我添加了JaCoCo gradle插件。这是我的项目级构建。gradle
文件:
apply plugin: 'jacoco'
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.0.0-beta6'
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
}
}
allprojects {
repositories {
jcenter()
maven { url "https://oss.sonatype.org/content/repositories/snapshots" }
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
subprojects { prj ->
apply plugin: 'jacoco'
jacoco {
toolVersion '0.7.6.201602180812'
}
task jacocoReport(type: JacocoReport, dependsOn: 'testDebugUnitTest') {
group = 'Reporting'
description = 'Generate Jacoco coverage reports after running tests.'
reports {
xml {
enabled = true
destination "${prj.buildDir}/reports/jacoco/jacoco.xml"
}
html {
enabled = true
destination "${prj.buildDir}/reports/jacoco"
}
}
classDirectories = fileTree(
dir: 'build/intermediates/classes/debug',
excludes: [
'**/R*.class',
'**/BuildConfig*',
'**/*$$*'
]
)
sourceDirectories = files('src/main/java')
executionData = files('build/jacoco/testDebugUnitTest.exec')
doFirst {
files('build/intermediates/classes/debug').getFiles().each { file ->
if (file.name.contains('$$')) {
file.renameTo(file.path.replace('$$', '$'))
}
}
}
}
}
jacoco {
toolVersion '0.7.6.201602180812'
}
task jacocoFullReport(type: JacocoReport, group: 'Coverage reports') {
group = 'Reporting'
description = 'Generates an aggregate report from all subprojects'
//noinspection GrUnresolvedAccess
dependsOn(subprojects.jacocoReport)
additionalSourceDirs = project.files(subprojects.jacocoReport.sourceDirectories)
sourceDirectories = project.files(subprojects.jacocoReport.sourceDirectories)
classDirectories = project.files(subprojects.jacocoReport.classDirectories)
executionData = project.files(subprojects.jacocoReport.executionData)
reports {
xml {
enabled = true
destination "${buildDir}/reports/jacoco/full/jacoco.xml"
}
html {
enabled = true
destination "${buildDir}/reports/jacoco/full"
}
}
doFirst {
//noinspection GroovyAssignabilityCheck
executionData = files(executionData.findAll { it.exists() })
}
}
它通过运行<code>工作得很好/gradlew JacoFullReport。但不幸的是,使用<code>RobolectricTestRunner@RunWith注释的测试,或者使用mockitojunitestrunner
运行的测试报告覆盖率很好。
任何帮助都将不胜感激来解决这个问题。
更新1:我注意到我应该使用RobolectricGradleTestRunner
。但没有帮助。
我遇到了同样的问题,但现在通过点击此链接为我解决了这个问题,
问题链接:https://github.com/robolectric/robolectric/issues/2230
此问题的解决方案在此处提及:
https://github . com/damp cake/Robolectric-jaco co-Sample/commit/f 9884 b 96 ba 5 e 456 cddb 3d 4d df 277065 bb 26 f1 d 3
公认的答案有点过时了。这是我们刚刚实现的一个类似的修复。在模块(即app) build.gradle中添加:
apply plugin: 'jacoco'
tasks.withType(Test) {
jacoco.includeNoLocationClasses = true
}
这确实需要JaCoCo 7.6,但您可能已经在使用它了。
工作室注意事项:
可能的变通办法-https://github.com/jacoco/jacoco/pull/288是已知问题
或者将Jacoco版本降级为0.7.1.201405082137
更新
不再需要这种解决方法。您必须使用gradle版本2.13
和jacoco版本0.7.6.201602180812
。
更新根build.gradle
:
buildscript {
dependencies {
classpath 'org.jacoco:org.jacoco.core:0.7.6.201602180812'
}
}
task wrapper( type: Wrapper ) {
gradleVersion = '2.13'
}
运行./gradlew包装器
更新项目build.gradle
:
apply plugin: 'jacoco'
android {
testOptions {
unitTests.all {
jacoco {
includeNoLocationClasses = true
}
}
}
}
我模拟了spring boot服务类来测试catch块语句。我的示例测试用例如下: 聚 甲醛: 测试用例执行得很好,但它没有反映在Java代码覆盖率报告中。我的catch语句仍然显示它没有被测试覆盖。 可能的原因是什么? 参考 具有Jacoco代码覆盖率的PowerMockito https://www . igorkromin . net/index . PHP/2018/02/20/jacoc
我正在尝试通过仪器测试运行浓缩咖啡(使用双意式浓缩咖啡)并通过Robolectric进行单元测试。到目前为止,我所拥有的主要基于甲板分级的例子。 注意:Gradle 1.10 我的目录结构如下,其中需要作为com.example.app运行。数据作为: 因此,当我运行时,我收到错误,无法识别中的浓缩咖啡导入。 当我运行 时,我收到错误,无法识别 中的 JUnit4 注释.java()。 如果我把任
所以我管理域 britoanderson.com,我试图让ssl工作。我使用证书机器人为两个w制作证书。子域和主 britoanderson.com 域。我将云版本设置为“完整”加密模式。出于某种原因,SSL证书适用于 https://www.britoanderson.com/ 但不能用于网站拒绝打开 https://britoanderson.com/。 以下是我的nginx默认文件: 主域
我通过GitHub将我的电报机器人部署到Heroku(我使用Webhook),机器人正在运行,但由于某种原因,它没有通过Webhook接收消息。 代码如下: 文件:
1、接口声明 在调用接口时必须在https请求的header中携带"token"参数。 token是智齿客服接口开放平台全局唯一的接口调用凭据。 开发者在调用各业务接口时都需使用token,开发者需要进行妥善保存。token的存储至少要保留32个字符空间。token的有效期目前为24个小时,需定时刷新,或根据接口返回的token失效提示,进行重新获取。请求token接口,无论token是否存在,都
我正在为我的项目设置Jacoco Gradle插件。该插件执行良好,并生成覆盖报告,但它不排除我将排除的包。 我想包含的类在com/xxx/ws/hn/**中,我想排除的类在com/xxx/ws/企业/**中。 这是我的Gradle脚本: 我有什么遗漏吗?我尝试过各种排除模式,包括“.”包的分隔符,而不是“/”,但似乎没有任何效果。任何帮助都将不胜感激。