Как загрузить отчеты об испытаниях источников Kotlin в Coveralls?
Я хочу автоматически загрузить свой отчет о тестировании Jacoco в Coveralls после того, как завершится сборка Travis. Это работает для Java, но как настроить его для Kotlin?
Сообщение об ошибке
Я могу сгенерировать отчет о тестировании Jacoco локально и на Travis, но когда 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 связывает меня с реализацией плагина 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
который я попробовал. Вопрос о покрытии кода Kotlin в конвейере CI сформулирован довольно обычно, но комментарий указывает на обсуждение. Kotlinlang.org, где кто-то показывает способ улучшить результат Jacoco в отношении kotlin, а ответные ссылки на плагин Jacoco Gradle, который я использую и работаю: когда я бегу
jacocoTestReport
задача, в которой создается отчетbuild/reports/jacoco/test/
, как в XML и HTML.Вопрос Kotlin Test Coverage также сформулирован в общих чертах и на него дан неоправданно сложный файл сборки, из которого я ничего нового не узнал.
- Вопрос Измерьте тестовое покрытие для кода Kotlin? утверждает, что отчет Jacoco не работает, но для меня это не так, как я сказал.
- Есть похожие вопросы по Java, например, инструмент для покрытия кода Java на GitHub, но для меня, когда я использую Java, все работает нормально.
PS На самом деле я хочу использовать Gradle Kotlin DSL, но так как никто, кажется, не использует его, я задаю этот вопрос для Gradle. Но в конце я хочу, чтобы этот вопрос был решен и для Kotlin DSL.
3 ответа
Kotlin не поддерживается Coveralls, попробуйте https://codecov.io/. Установите его на GitHub с помощью Marketplace и добавьте в свой .travis.yml
after_success:
- bash <(curl -s https://codecov.io/bash)
Затем совершите и нажмите, готово!
Вы можете просмотреть результат (после завершения сборки) по адресу https://codecov.io/gh/githubaccountname/reponame
Имеет аналогичный опыт работы с различными продуктами QA, не поддерживающими или частично поддерживающими кодовые базы Kotlin. Пытался отправить PR в поддержку пары проектов, но безрезультатно.
В конце концов, остановился на Coshops и добавил плагин, ориентированный на 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/coshops-gradle-plugin
И помимо того, что находится в README.md, мне понадобилась эта деталь в build.gradle:
coveralls {
sourceDirs += ['src/main/kotlin']
jacocoReportPath "${buildDir}/reports/jacoco/report.xml"
}