代码之家  ›  专栏  ›  技术社区  ›  Adam Arold

在使用JaCoCo和Gradle和Kotlin时,如何忽略方法?

  •  1
  • Adam Arold  · 技术社区  · 6 年前

    我正试着和格拉德尔和科特林一起建立雅科科,我的问题是我有很多 data class 已生成编译器的 equals , hashCode toString 方法。

    我在文件里读到了和杰科科在一起我可以 忽略 方法,但似乎JaCoCo的Gradle插件只支持 排除 s。我该怎么解决这个问题?

    我试过这个:

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

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

    我做错什么了?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Godin    6 年前

    例如在 JaCoCo version 0.8.1 :您唯一需要做的就是确保Gradle使用正确的JaCoCo版本。到目前为止在JaCoCo中实现的所有过滤器都是无条件启用的,并在生成报告期间进行。在同一个公告中 announcement of 0.8.2

    https://docs.gradle.org/current/userguide/jacoco_plugin.html

    默认版本取决于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 jacocoTestReport 使用Gradle4.7你会看到

    enter image description here

    加上

    jacoco {
      toolVersion = '0.8.2'
    }
    

    enter image description here


    另外,我相信 exclude

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

    exclusion of tests from execution jacoco property of test 没有 -作为补充证明

    test {
      jacoco {
        exclude("Tests.class")
      }
    }
    

    推荐文章