我正在尝试使用Gradle和Kotlin设置JaCoCo,但我的问题是我有很多data class
都由编译器生成的equals
,hashCode
和{{ 1}}方法。
我在文档中已经读到,使用JaCoCo可以忽略方法,但是好像JaCoCo的Gradle插件仅支持 exclusion 。我该如何解决?
我尝试过:
toString
但是在这些方法旁边我仍然可以看到0%。
我在做什么错了?
答案 0 :(得分:1)
例如JaCoCo version 0.8.1公告中所述:您唯一需要做的-确保Gradle使用正确的JaCoCo版本。到目前为止,JaCoCo中实现的所有过滤器都是无条件启用的,并且会在生成报告时进行。在同一则公告和announcement of 0.8.2中,您可以看到
通过Gradle JaCoCo插件,您可以使用“ toolVersion”-https://docs.gradle.org/current/userguide/jacoco_plugin.html
为“ JaCoCoReport”任务选择运行时和版本。
该默认版本取决于Gradle的版本-例如Gradle 4.7 by default uses version JaCoCo 0.8.1,而根据JaCoCo changelog则在0.8.2。中添加了针对Kotlin的过滤器。
给定src/main/kotlin/DataClass.kt
data class DataClass(var x)
src/test/kotlin/Tests.kt
class Tests {
@org.junit.Test
fun test_data_class() {
DataClass(42)
}
}
和build.gradle
buildscript {
ext.kotlin_version = "1.2.41"
repositories {
mavenCentral()
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
apply plugin: "kotlin"
apply plugin: "jacoco"
repositories {
mavenCentral()
mavenLocal()
}
dependencies {
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
testCompile "junit:junit:4.12"
}
tasks["jacocoTestReport"].dependsOn("test")
使用Gradle 4.7执行gradle jacocoTestReport
后,您会看到
添加
后jacoco {
toolVersion = '0.8.2'
}
将产生相同的Gradle和相同的命令
P.S。我相信exclude
是您的尝试
test { jacoco { exclude("*equals", "*hashCode") } }
之所以引用exclusion of tests from execution,是因为jacoco
property of test
没有exclude
-作为对
test {
jacoco {
exclude("Tests.class")
}
}
与上述示例相同,导致测试为零。