Kotlin Setup 的 Sonar Jacoco 不生成代码覆盖率
Posted
技术标签:
【中文标题】Kotlin Setup 的 Sonar Jacoco 不生成代码覆盖率【英文标题】:Sonar Jacoco for Kotlin Setup not generating code coverage 【发布时间】:2018-07-24 15:17:33 【问题描述】:我正在尝试使用 Jacoco 为 Kotlin 进行声纳设置以生成代码覆盖率报告,但它没有显示任何代码覆盖率。在检查声纳控制台时,它显示以下错误。任何人以前都遇到过这个问题,任何可能遗漏的建议。
元信息
使用 sonarqube 版本“2.6.1”的插件
gradleVersion = '3.0.1'
kotlinVersion = '1.2.21'
Sonarqube 版本 = 版本 6.7.1(内部版本 35068)- LGPL v3
令人沮丧的是,我的设置项目生成空白代码覆盖率报告:(。PFA。
编辑:请找到项目结构快照。
我正在添加我用来生成声纳矩阵报告的声纳和 Jacoco gradle 文件设置。
这里是 sonar.gradle 文件:
sonarqube
properties
property "sonar.projectKey", "jacoco.sonar.test"
property "sonar.projectName", "Sonar Jacoco Test"
property "sonar.projectVersion", "1.1"
property "sonar.java.source", "7"
property "sonar.android.lint.report", "build/outputs/lint-results.xml"
property "sonar.java.binaries", "build/tmp/kotlin-classes"
property "sonar.java.test.binaries", "build/intermediates/classes/test/,build/tmp/kotlin-classes/devDebugUnitTest"
property "sonar.tests","src/test/java"
property "sonar.sources","src/main/java"
property "sonar.java.coveragePlugin", "jacoco"
property "sonar.jacoco.reportPaths","build/jacoco/testDevDebugUnitTest.exec"
property "sonar.junit.reportsPath","build/test-results/testDevDebugUnitTest"
这里是 jacoco.gradle 文件
apply plugin: 'jacoco'
jacoco
toolVersion = "0.7.9"
reportsDir = file("$project.projectDir/app/build/reports")
task jacocoTestReport(type: JacocoReport, dependsOn: "app:testDevDebugUnitTest")
group = "Reporting"
reports
xml.enabled = true
html.enabled = true
def fileFilter = ['**/R.class',
'**/R$*.class',
'**/BuildConfig.*',
'**/*$ViewInjector*.*',
'**/*$ViewBinder*.*',
'**/*$MembersInjector*.*',
'**/Manifest*.*',
'**/*Test*.*',
'android/**/*.*']
classDirectories = fileTree(
dir: "$project.projectDir/app/build/intermediates/classes/dev",
excludes: fileFilter
) + fileTree(
dir: "$project.projectDir/app/build/tmp/kotlin-classes/devDebug",
excludes: fileFilter
)
// sources
sourceDirectories = files(["$project.projectDir/app/src/main/java"])
executionData = files("$project.projectDir/app/build/jacoco/testDevDebugUnitTest.exec")
按照我用来生成 Jacobo 报告然后飙升报告的 gradle 命令。
./gradlew clean jacocoTestReport sonarqube
我观察到我得到的,一定是有一些路径。
未收集覆盖信息。也许你忘记包括 调试信息到编译的类?
对不起,如果这看起来有点长;但这是我发现的最好的总结在一个地方。另请注意,我尝试使用 Java 类而不是 Kotlin 进行类似设置,它正在生成具有代码覆盖率的报告。
【问题讨论】:
您能否edit您的问题包括您的SonarQube版本? 请检查您的 SonarQube 页面的页脚并添加您在那里找到的版本。我怀疑您标记为 SonarQube 版本的实际上是您的扫描仪版本。 您使用的是什么版本的 SonarJava?您在 Jacoco 报告上生成哪个版本? SonarJava 5.1 添加了对 jacoco 8.0 的支持 - 我不确定您正在生成什么版本,但这可能是相关的? 我正在使用:SQube:7.0,SRunner:3.0.3.778。 Jacoco 版本我没有明确提及,应该使用最新版本(即 jacoco-0.8.0)。 kotlin 源文件在哪里? 【参考方案1】:您需要做一些事情才能使其适用于 kotlin。
确保您的声纳 > 7.5 如果您的 sonarqube 版本plugins
id "jacoco"
id "org.sonarqube" version "2.7.1"
关注这个网址:https://community.sonarsource.com/t/coverage-test-data-importing-jacoco-coverage-report-in-xml-format/12151
在您的 build.gradle 中添加属性以搜索 jacoco 结果。
property 'sonar.coverage.jacoco.xmlReportPaths', "$buildDir/reports/jacoco/test/jacocoTestReport.xml"
点击此网址获取属性:https://docs.sonarqube.org/7.5/analysis/analysis-parameters/
【讨论】:
感谢您的回复。我现在没有相同的设置来尝试这个。但是您是否可以创建和共享 repo 示例,以便其他人可以参考,这将有很大帮助。【参考方案2】:如果您使用的是 android 测试编排器,这可能是问题所在。
我今天遇到了同样的问题,在禁用 android 测试编排器后,覆盖再次起作用。
错误报告:https://issuetracker.google.com/issues/72758547
我不确定如何配置 Android Kotlin 构建,但在我的 Android Java build.gradle
中,我不得不像这样注释掉测试编排器:
android
...
testOptions
// temporarily disable the orchestrator as this breaks coverage: https://issuetracker.google.com/issues/72758547
//execution 'ANDROID_TEST_ORCHESTRATOR'
...
【讨论】:
不,我没有使用ANDROID_TEST_ORCHESTRATOR以上是关于Kotlin Setup 的 Sonar Jacoco 不生成代码覆盖率的主要内容,如果未能解决你的问题,请参考以下文章
ANT 任务:使用 JaCoCo 的 SonarQube 扫描仪代码覆盖率报告
在Gradle中添加Dependency Check,以及在Sonar中查看报告