如何将Kotlin源的测试报告上传到Coveralls?

How to upload test reports of Kotlin sources to Coveralls?

I want to upload my Jacoco test report to Coveralls automatically after my Travis build finishes. It works for Java, but how to configure it for Kotlin?

错误信息

我可以在本地和 Travis 上生成 Jacoco 测试报告,但是当 Travis 尝试提交工作服时失败并显示消息

> Task :coveralls
No source file found on the project: "kotlin-template-project"
With coverage file: /home/travis/build/myname/myreponame/build/reports/jacoco/test/jacocoTestReport.xml

Google link 带我到 Gradle 插件 implementation 它显示了它抛出此消息的位置,它告诉我(我认为)Jacoco 报告文件找到了,但没有找到工作服显然需要的源文件。

我试过的

因此,我尝试通过所有这些方式将 coveralls 任务指向我的源文件:

coveralls {
    sourceDirs += allprojects.sourceSets.main.allSource.srcDirs.flatten()
    sourceDirs += files(sourceSets.main.kotlin.srcDirs).files.absolutePath
    project.extensions.coveralls.sourceDirs += project.sourceSets.main.kotlin.srcDirs
    sourceDirs += ['src/main/kotlin']
    jacocoReportPath = 'build/reports/jacoco/test/jacocoTestReport.xml'
    sourceDirs += ['src/test/kotlin']
    sourceDirs += ["${projectDir}/src/main/kotlin"]
}

我还尝试将 sourceSets project.sourceSets.main 添加到 jacocoTestReport 任务中。

项目设置

我的最小 build.gradle 文件:

plugins {

    id 'org.jetbrains.kotlin.jvm' version '1.2.50'
    id 'java' // Required by at least JUnit.

    // Test coverage
    id 'jacoco'

    // Upload jacoco coverage reports to coveralls
    id 'com.github.kt3k.coveralls'  version '2.8.2'
}

dependencies {
    compile 'org.jetbrains.kotlin:kotlin-stdlib-jdk8'

    // JUnit 5
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.2.0'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.2.0'
    testRuntime 'org.junit.platform:junit-platform-console:1.2.0'

    // Kotlintest
    testCompile 'io.kotlintest:kotlintest-core:3.1.6'
    testCompile 'io.kotlintest:kotlintest-assertions:3.1.6'
    testCompile 'io.kotlintest:kotlintest-runner-junit5:3.1.6'

    // Spek
    testCompile 'org.jetbrains.spek:spek-api:1.1.5'
    testRuntime 'org.jetbrains.spek:spek-junit-platform-engine:1.1.5'
}

repositories {
    mavenCentral()
    mavenLocal()
    jcenter()
}

test {
    // Enable JUnit 5 (Gradle 4.6+).
    useJUnitPlatform()

    // Always run tests, even when nothing changed.
    dependsOn 'cleanTest'

    // Show test results.
    testLogging {
        events "passed", "skipped", "failed"
    }
}

// Test coverage reporting
jacocoTestReport {
    // Enable xml for coveralls.
    reports {
        html.enabled = true
        xml.enabled = true
        xml.setDestination(file("${buildDir}/reports/jacoco/test/jacocoTestReport.xml"))
    }
}

coveralls {
    sourceDirs += ['src/main/kotlin']
    jacocoReportPath = 'build/reports/jacoco/test/jacocoTestReport.xml'
}

相关问题

PS 实际上我想使用 Gradle Kotlin DSL,但由于似乎没有人使用它,所以我问这个问题是为了 Gradle。但最终我希望 Kotlin DSL 也能解决这个问题。

[编辑 2020 年 8 月] @nbaztec 编写了一个插件来支持 Kotlin,请参阅


旧答案:

Coveralls 不支持 Kotlin,例如参见问题中提到的这个开放问题(在问题中还提到那里提供的解决方法不起作用):https://github.com/kt3k/coveralls-gradle-plugin/issues/77

解决方案:改为尝试 Codecov.io。 使用 Marketplace 将其安装到 GitHub 并添加到您的 .travis.yml

after_success:
  - bash <(curl -s https://codecov.io/bash)

然后提交并推送,完成!

您可以在 https://codecov.io/gh/githubaccountname/reponame

查看结果(构建完成后)

对各种不支持或仅部分支持 Kotlin 代码库的 QA 产品有类似的体验。尝试向几个项目提交支持 PR,但无济于事。

最后选择了 Coveralls,并为 platform

贡献了一个以 Kotlin 为中心的插件

https://github.com/nbaztec/coveralls-jacoco-gradle-plugin

用法

将插件包含在您的 build.gradle.kts 中(类似于 build.gradle 文件):

plugins {
    jacoco
    id("com.github.nbaztec.coveralls-jacoco")
}

然后将环境变量 COVERALLS_REPO_TOKEN 设置为工作服页面中的令牌。

现在您可以使用 coverallsJacoco 任务来发布覆盖率报告。

有关 CI 中的更多信息和用法,请参阅 https://github.com/nbaztec/coveralls-jacoco-gradle-plugin

不是答案,但如果其他人像我一样在 nbaztec 上苦苦挣扎,我想提供一个对我有用的替代方案:https://github.com/kt3k/coveralls-gradle-plugin

除了 README.md 中的内容外,我还需要 build.gradle 中的详细信息:

coveralls {
    sourceDirs += ['src/main/kotlin']
    jacocoReportPath "${buildDir}/reports/jacoco/report.xml"
}