将JaCoCo与Gradle和Kotlin结合使用时,如何忽略方法?

时间:2018-10-09 22:24:36

标签: gradle kotlin jacoco

我正在尝试使用Gradle和Kotlin设置JaCoCo,但我的问题是我有很多data class都由编译器生成的equalshashCode和{{ 1}}方法。

我在文档中已经读到,使用JaCoCo可以忽略方法,但是好像JaCoCo的Gradle插件仅支持 exclusion 。我该如何解决?

我尝试过:

toString

但是在这些方法旁边我仍然可以看到0%。

我在做什么错了?

1 个答案:

答案 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后,您会看到

enter image description here

添加

jacoco {
  toolVersion = '0.8.2'
}

将产生相同的Gradle和相同的命令

enter image description here


P.S。我相信exclude是您的尝试

test {
    jacoco {
        exclude("*equals", "*hashCode")
    }
}

之所以引用exclusion of tests from execution,是因为jacoco property of test没有exclude-作为对

的证明
test {
  jacoco {
    exclude("Tests.class")
  }
}

与上述示例相同,导致测试为零。