首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用build.gradle.kts将覆盖报告(JaCoCo)添加到基于kotest的kotest中?

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

Stack Overflow用户
提问于 2020-06-02 01:15:21
回答 1查看 733关注 0票数 2

我将Kotlin用于服务器端,并希望添加测试覆盖率(通过使用JaCoCo,但可以是任何其他开源)。目前,我没有找到任何文档来解释如何基于kotest向kotlin项目启用/添加覆盖报告。(是的,我试过official documentation)

build.gradle.kts:

代码语言:javascript
复制
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")
        }
    }
}

任何帮助都是最好的。提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2020-10-07 20:19:47

根据我的经验,Jacoco和Kotest开箱即用就能很好地互操作。我正在使用它,我所需要做的就是:

代码语言:javascript
复制
plugins {
    jacoco
    // The rest of your plugins
}
// Your build, as it was before

您可以检查working Jacoco + Kotest build here

要验证它是否正常工作,您可以例如将Jacoco生成的数据提供给Codecov.io等服务。首先,生成XML格式的报告:

代码语言:javascript
复制
tasks.jacocoTestReport {
    reports {
        xml.isEnabled = true
    }
}

然后使用Codecov.io服务获取并分析结果:

代码语言:javascript
复制
bash <(curl -s https://codecov.io/bash)

正如您看到的in this report,Jacoco无需进一步配置即可完成其工作。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62137437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档