android - JaCoCo Gradle - 排除类并覆盖包含
问题描述
我正在尝试改进我的项目中的代码覆盖率,并希望排除任何View
类(因为它们未经测试/可测试)但包含任何ViewModel
类......但我似乎无法让通配符过滤器合作,这就是全部或者什么都没有!
def excludedPatterns = [
//... other stuff
'**/*Fragment*.*',
'**/*Activity*.*',
'**/*Adapter*.*',
'**/*View*.*', // <-- this line is excluding classes ending w/ ViewModel
'**/*ViewState*.*',
'**/*ViewHolder*.*',
]
task codeCoverageReport(type: JacocoReport, dependsOn: 'testDebugUnitTest') {
group = "Reporting"
description = "Generate Jacoco coverage reports after running tests."
reports {
html.enabled true
}
def debugTree = fileTree(
dir: "$project.buildDir/tmp/kotlin-classes/debug",
excludes: excludedPatterns
)
classDirectories.from = files([debugTree])
def mainSrc = "$project.projectDir/src/main/java"
sourceDirectories.from = files([mainSrc])
executionData.from = fileTree(dir: project.buildDir, includes: [
'jacoco/testDebugUnitTest.exec',
'outputs/code-coverage/connected/*coverage.ec'
])
}
我已经尝试了几种变体**/*View*.*'
,包括**/*View.*'
和其他...有什么我忽略的吗?
解决方案
您可以filter
使用fileTree
.
例如对于
src/main/java/View.java
class View {}
src/main/java/ViewModel.java
class ViewModel {}
src/main/java/Example.java
class Example {}
src/test/java/ExampleTest.java
import org.junit.Test;
public class ExampleTest {
@Test
public final void test() {
}
}
和build.gradle
apply plugin: 'java'
apply plugin: 'jacoco'
repositories {
mavenCentral()
}
dependencies {
testImplementation 'junit:junit:4.13'
}
jacocoTestReport {
classDirectories.setFrom(
fileTree(dir: "build/classes/java/main")
.filter({file -> !file.name.contains('View') || file.name.contains('ViewModel')})
)
}
执行
gradle clean test jacocoTestReport
build/reports/jacoco/test/html/
使用 Gradle 6.2.1 将在不包含View
但包含ViewModel
and的目录中生成以下报告Example
:
推荐阅读
- javascript - 如何输入图像并将其用作光标?
- css - 媒体查询问题技术评估
- excel - 将重复性任务分成不同的步骤和程序
- c# - 检查文件是否存在并更新表列
- machine-learning - 为了使用NB分类器,特征何时独立?
- c# - 如何减少 Web API Core 中的数据大小?
- php - 如何发送表中的所有行?
- node.js - 从下拉列表中选择第一个元素 [ 选择标签 ] 导致后端崩溃,但选择其他作品就好了
- google-chrome-extension - 是否可以使用 Chrome 的存储区资源管理器扩展来复制我的 OneTab 数据?
- reactjs - React Airbnb 日期选择器自定义年/月导航不需要的年/月跳转