Kotlin 如何使用build.gradle.kts将覆盖率报告(JaCoCo)添加到基于kotest的测试中?

Kotlin 如何使用build.gradle.kts将覆盖率报告(JaCoCo)添加到基于kotest的测试中?,kotlin,build.gradle,jacoco,gradle-kotlin-dsl,kotest,Kotlin,Build.gradle,Jacoco,Gradle Kotlin Dsl,Kotest,我在服务器端使用Kotlin,我想添加测试覆盖率(通过使用JaCoCo,但可以是任何其他开源)。 目前,我还没有找到任何文档来解释如何基于kotest启用/添加覆盖率报告到kotlin项目,而kotest实际上是有效的。 (是的,我试过了) build.gradle.kts: import Libraries.coroutines import Libraries.koTest import Libraries.koTestCore import Libraries.mockk import L

我在服务器端使用Kotlin,我想添加测试覆盖率(通过使用JaCoCo,但可以是任何其他开源)。 目前,我还没有找到任何文档来解释如何基于kotest启用/添加覆盖率报告到kotlin项目,而kotest实际上是有效的。 (是的,我试过了)

build.gradle.kts:

import Libraries.coroutines
import Libraries.koTest
import Libraries.koTestCore
import Libraries.mockk
import Libraries.testcontainers
import Libraries.testcontainersPostgres

plugins {
    java
    `kotlin-dsl` version "1.3.5" apply false
    kotlin("jvm") version Versions.kotlin_version
    kotlin("plugin.serialization") version Versions.kotlin_version apply false
    id("com.diffplug.gradle.spotless") version Plugins.spotless
    id("com.palantir.docker") version Plugins.docker apply false
    id("com.palantir.docker-run") version Plugins.docker apply false
    id("com.google.protobuf") version Plugins.protobuf apply false
    id("org.flywaydb.flyway") version Plugins.flyway apply false
}

allprojects {
    group = "my-app"
    version = "2.0"

    apply(plugin = "kotlin")
    apply(plugin = "com.diffplug.gradle.spotless")

    repositories {
        mavenCentral()
        jcenter()
    }

    tasks {
        compileKotlin {
            dependsOn(spotlessApply)
            kotlinOptions {
                jvmTarget = "11"
            }
        }
        compileTestKotlin {
            kotlinOptions {
                jvmTarget = "11"
            }
        }
    }

    java {
        sourceCompatibility = JavaVersion.VERSION_11
        targetCompatibility = JavaVersion.VERSION_11
    }

    tasks.withType<Test> {
        useJUnitPlatform()
        maxParallelForks = 1
        environment("ENV", "test")
    }

    afterEvaluate {
        project.configurations.forEach {
            // Workaround the Gradle bug resolving multiplatform dependencies.
            if (it.name.contains("Proto")) {
                it.attributes.attribute(Usage.USAGE_ATTRIBUTE, objects.named(Usage::class.java, Usage.JAVA_RUNTIME))
            }
        }
    }
}

subprojects {
    spotless {
        kotlin {
            ktlint().userData(mapOf("disabled_rules" to "no-wildcard-imports"))
            trimTrailingWhitespace()
            endWithNewline()
        }
    }

    dependencies {
        implementation(coroutines)
        testImplementation(koTest)
        testImplementation(koTestCore)
        testImplementation(mockk)
        testImplementation(testcontainers)
        testImplementation(testcontainersPostgres)
    }

    configurations {
        all {
            resolutionStrategy.setForcedModules("org.apache.httpcomponents:httpclient:4.5.9")
        }
    }
}
import Libraries.coroutines
导入库.koTest
导入库.koTestCore
导入库.mock
导入Libraries.testcontainers
导入库。TestContainerPostgres
插件{
JAVA
`kotlin dsl`版本“1.3.5”应用错误
kotlin(“jvm”)版本。kotlin_版本
kotlin(“plugin.serialization”)版本。kotlin\u版本应用错误
id(“com.diffplug.gradle.spotless”)版本Plugins.spotless
id(“com.palantir.docker”)版本Plugins.docker apply false
id(“com.palantir.docker run”)版本Plugins.docker apply false
id(“com.google.protobuf”)版本Plugins.protobuf apply false
id(“org.flywaydb.flyway”)版本Plugins.flyway apply false
}
所有项目{
group=“我的应用程序”
version=“2.0”
应用(plugin=“kotlin”)
应用(plugin=“com.diffplug.gradle.spotless”)
存储库{
mavenCentral()
jcenter()
}
任务{
科特林{
德彭森(一尘不染)
科特洛普斯酒店{
jvmTarget=“11”
}
}
compileTestKotlin{
科特洛普斯酒店{
jvmTarget=“11”
}
}
}
爪哇{
sourceCompatibility=JavaVersion.VERSION\u 11
targetCompatibility=JavaVersion.VERSION_11
}
tasks.withType{
useJUnitPlatform()
maxParallelForks=1
环境(“环境”、“测试”)
}
后评价{
project.configurations.forEach{
//解决Gradle缺陷的方法是解决多平台依赖关系。
if(it.name.contains(“Proto”)){
attributes.attribute(Usage.Usage\u属性,objects.named(Usage::class.java,Usage.java\u运行时))
}
}
}
}
子项目{
一尘不染{
科特林{
ktlint().userData(将“禁用的_规则”映射为“无通配符导入”))
trimTrailingWhitespace()
endWithNewline()
}
}
依赖关系{
实施(协同程序)
测试实施(koTest)
测试实施(koTestCore)
测试实施(mockk)
测试实现(testcontainers)
测试实施(TestContainerPostgres)
}
配置{
全部{
resolutionStrategy.setForcedModule(“org.apache.httpcomponents:httpclient:4.5.9”)
}
}
}

任何帮助都会很好。提前感谢。

以我的经验,Jacoco和Kotest的互操作非常好。我正在使用它,我需要做的是:

插件{
杰科科
//剩下的插件
}
//你的身材,就像以前一样
你可以检查一个房间

为了验证它是否有效,例如,您可以将Jacoco生成的数据提供给服务,例如。 首先,以XML格式生成报告:

tasks.jacoTestReport{
报告{
xml.isEnabled=true
}
}
然后使用Codecov.io服务获取并分析结果:


bash根据我的经验,Jacoco和Kotest的互操作非常好。我正在使用它,我需要做的是:

插件{
杰科科
//剩下的插件
}
//你的身材,就像以前一样
你可以检查一个房间

为了验证它是否有效,例如,您可以将Jacoco生成的数据提供给服务,例如。 首先,以XML格式生成报告:

tasks.jacoTestReport{
报告{
xml.isEnabled=true
}
}
然后使用Codecov.io服务获取并分析结果:

bash