我想在我的 Travis 构建完成后自动将我的 Jacoco 测试报告上传到工作服。它适用于 Java,但如何为 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
谷歌将我链接到 Gradle 插件实现,它显示了它在哪里抛出此消息,它告诉我(我认为)找到了 Jacoco 报告文件,但没有找到工作服显然需要的源文件。
我试过的
因此,我尝试通过以下所有方式将工作服任务指向我的源文件:
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'
}
相关问题
- 基本上相同的问题在https://github.com/kt3k/coveralls-gradle-plugin/issues/32但解决方案是设置
sourceDirs
并且jacocoReportPath
我已经尝试过。 - 在https://github.com/kt3k/coveralls-gradle-plugin/issues/39和https://github.com/kt3k/coveralls-gradle-plugin/issues/63建议添加
sourceDirs += ['src/main/kotlin']
听起来合理但不没救 同样的,从第一个链接,sourceDirs = files(sourceSets.main.kotlin.srcDirs).files.absolutePath
。 - 从https://github.com/kt3k/coveralls-gradle-plugin/issues/77解决方案是
project.extensions.coveralls.sourceDirs += project.sourceSets.main.kotlin.srcDirs
我尝试过的。 CI 管道中的Kotlin 代码覆盖率问题的措辞相当笼统,但是有一条评论指向了讨论:当我运行任务时,会在 xml 和 html 中
jacocoTestReport
生成报告。build/reports/jacoco/test/
Kotlin Test Coverage这个问题也很笼统,并用一个不必要的复杂构建文件来回答,我从中没有学到任何新东西。
- 测量 Kotlin 代码的测试覆盖率?声称 Jacoco 报告不起作用,但对我来说,情况并非如此。
- Java 也有类似的问题,例如GitHub 上的 Java 代码覆盖工具,但对我来说,当我使用 Java 时,一切正常。
PS 实际上我想使用 Gradle Kotlin DSL,但由于似乎没有人使用它,所以我在为 Gradle 提出这个问题。但最后,我希望 Kotlin DSL 也能解决这个问题。