有没有一种简便的方法可以在Spring Boot中使用Java注释从测试范围中排除类?

时间:2018-11-27 13:21:12

标签: java spring-boot testing gradle kotlin

我有一个(gradle + kotlin)春季启动项目,其中包含多个DTO,配置类,常量等,我不想在测试覆盖率分析期间进行分析。

我可以使用一种方便的Java符号吗?

3 个答案:

答案 0 :(得分:1)

您说您正在使用Kotlin和Gradle。因此,我假设您正在使用jacoco进行测试。

这是jacoco涵盖的案例之一。

jacocoTestReport {
    afterEvaluate {
        classDirectories = files(classDirectories.files.collect {
            fileTree(dir: it,
                    exclude: ['**/*Application**'])
        })
    }
}

答案 1 :(得分:0)

这就是最终为我工作的原因。不得不以一种非常古怪的方式编写一些自定义的自定义过滤逻辑,但这确实奏效了。

赞扬@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)
        }
    }
}

答案 2 :(得分:-1)

我不知道您使用哪种工具覆盖测试类,但是here是如何从jacoco的测试覆盖中排除类的示例。