我正在尝试改善项目中的代码覆盖率,并希望排除任何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
on fileTree
。
例如]
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
使用Gradle 6.2.1将在目录
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/
和View
:
ViewModel