Как игнорировать методы при использовании JaCoCo с Gradle и Kotlin? - PullRequest
0 голосов
/ 10 октября 2018

Я пытаюсь настроить JaCoCo с Gradle и Kotlin, и моя проблема в том, что у меня есть много data class, которые имеют сгенерированные компилятором методы equals, hashCode и toString.

Я читал в документации, что с JaCoCo я могу иметь игнорируемых методов, но похоже, что плагин Gradle для JaCoCo поддерживает только exclusion s.Как мне это исправить?

Я пробовал это:

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

, но я все еще вижу 0% рядом с этими методами.

Что я делаю не так?

1 Ответ

0 голосов
/ 10 октября 2018

Как указано, например, в объявлении JaCoCo версии 0.8.1 : единственное, что вам нужно сделать - это убедиться, что Gradle использует правильную версию JaCoCo.Все фильтры, реализованные на данный момент в JaCoCo, включены безоговорочно и имеют место при генерации отчета.В том же объявлении и в объявлении 0.8.2 вы можете видеть, что

С плагином Gradle JaCoCo вы можете выбрать время выполнения и версию для задачи "JaCoCoReport", используя "toolVersion"- https://docs.gradle.org/current/userguide/jacoco_plugin.html

И эта версия по умолчанию зависит от версии Gradle - например, Gradle 4.7 по умолчанию использует версию JaCoCo 0.8.1 , а согласно JaCoCo changelog Фильтры для Kotlin были добавлены в 0.8.2.


Так дано 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 с использованием Gradle 4.7 вы увидите

enter image description here

И после добавления

jacoco {
  toolVersion = '0.8.2'
}

один и тот же Gradle и одна и та же команда выдаст

enter image description here


PS Я считаю, что exclude в вашемпопытка

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

относится к исключению тестов из выполнения , поскольку jacoco свойство test не имеет exclude- какдобавление

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

к тому же примеру, приведенному выше, приводит к нулевым испытаниям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...