Есть ли простой способ исключить классы из тестового покрытия, используя аннотации Java в Spring Boot? - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть проект пружинной загрузки (gradle + kotlin) с несколькими DTO, классами конфигурации, константами и т. Д., Которые я не хочу анализировать во время анализа покрытия тестами.

Есть ли удобная нотация Javaчто я могу использовать?

Ответы [ 3 ]

0 голосов
/ 28 ноября 2018

Вы сказали, что используете kotlin и gradle.Поэтому я предполагаю, что вы используете jacoco для тестового покрытия.

Это один из примеров исключений покрытия jacoco.

jacocoTestReport {
    afterEvaluate {
        classDirectories = files(classDirectories.files.collect {
            fileTree(dir: it,
                    exclude: ['**/*Application**'])
        })
    }
}
0 голосов
/ 28 ноября 2018

Это то, что сработало для меня.Пришлось написать какую-то нестандартную логику фильтрации очень хакерским способом, но это помогло.

Upvoting Ответ @Min Hyoung Hong за то, что привел меня на правильный путь.

build.gradle.kts

tasks {
    withType<KotlinCompile<KotlinJvmOptions>> {
        kotlinOptions.freeCompilerArgs = listOf("-Xjsr305=strict")
        kotlinOptions.jvmTarget = "1.8"
    }

    withType<JacocoReport> {
        reports {
            xml.isEnabled = false
            csv.isEnabled = false
            html.destination = file("$buildDir/jacocoHtml")
        }

        afterEvaluate {
            val filesToAvoidForCoverage = listOf(
                    "/dto",
                    "/config",
                    "MyApplicationKt.class"
            )
            val filesToCover = mutableListOf<String>()
            File("build/classes/kotlin/main/app/example/core/")
                    .walkTopDown()
                    .mapNotNull { file ->
                        var match = false
                        filesToAvoidForCoverage.forEach {
                            if (file.absolutePath.contains(it)) {
                                match = true
                            }
                        }
                        return@mapNotNull if (!match) {
                            file.absolutePath
                        } else {
                            null
                        }
                    }
                    .filter { it.contains(".class") }
                    .toCollection(filesToCover)

            classDirectories = files(filesToCover)
        }
    }
}
0 голосов
/ 27 ноября 2018

Я не знаю, какие инструменты вы используете для покрытия ваших тестовых классов, но здесь - пример того, как исключить классы из тестового покрытия с помощью jacoco.

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