gpt4 book ai didi

android - SonarQube 报告中未显示测试覆盖率

转载 作者:行者123 更新时间:2023-11-29 00:56:03 26 4
gpt4 key购买 nike

我尝试在我的应用程序模块中的代码的 Android Kotlin 应用程序的 SonarQube 中显示测试覆盖率。我可以生成 jacoco 覆盖率结果并显示 SonarQube qualymetrics,但问题是 SonarQube 中未显示测试覆盖率:

https://imgur.com/a/xOjxLl1

在我项目的 build.gradle 中我有:

...
dependencies {
classpath 'org.jacoco:org.jacoco.core:0.8.3'
}
...

在我的应用模块的 build.gradle 中

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'org.sonarqube'
apply plugin: 'jacoco'

jacoco {
toolVersion = '0.8.3'
}

tasks.withType(Test) {
jacoco.includeNoLocationClasses = true
}
android {
...
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
testCoverageEnabled true
}
debug {
testCoverageEnabled true
}
testOptions {
animationsDisabled true
unitTests {
returnDefaultValues = true
includeAndroidResources = true
}
}
task jacocoTestReport(type: JacocoReport, dependsOn: ['testDebugUnitTest', 'createDebugCoverageReport']) {

reports {
xml.enabled = true
html.enabled = true
}

def fileFilter = [ '**/R.class', '**/R$*.class', '**/BuildConfig.*', '**/Manifest*.*', '**/*Test*.*', 'android/**/*.*' ]
def debugTree = fileTree(dir: "$project.buildDir/tmp/kotlin-classes/debug", excludes: fileFilter)
def mainSrc = "$project.projectDir/src/main/java"

sourceDirectories = files([mainSrc])
classDirectories = files([debugTree])
executionData = fileTree(dir: project.buildDir, includes: [
'jacoco/testDebugUnitTest.exec', 'outputs/code-coverage/connected/*coverage.ec'
])
}

sonarqube {
properties {
property 'sonar.projectKey', 'mySonarKey'
property 'sonar.projectName', 'myProjectName'
property "sonar.host.url", "http://localhost:9000" // local sonar address

property "sonar.java.binaries", 'target/classes,app/build/tmp/kotlin-classes'
property "sonar.sources", 'src/main/java'
property "sonar.tests", 'src/androidTest/java'

property "sonar.java.coveragePlugin", "jacoco"
property "sonar.coverage.jacoco.xmlReportPaths", "./build/reports/jacoco/jacocoTestReport/jacocoTestReport.xml" //link to xml file that generated by jacoco
}
}
...

我生成我的 jacoco 报告:gradlew clean jacocoTestReport

并生成我的sonarqube分析:gradlew sonarqube

生成 jacoco 报告 myAppName\app\build\reports\jacoco\jacocoTestReport\jacocoTestReport.xml

我在报告旁边还有一个 html 文件夹,我可以在其中看到我的测试覆盖率生成了正确的覆盖率。

所以问题是我可以更改什么以在 SonarQube 中显示我生成的 jacoco 覆盖范围?

(我不确定我在我的应用程序模块 build.gradle 中添加的 sonarqube.properties)

最佳答案

我很长一段时间都遇到同样的问题,解决方案是更改 build.gradle 中的路径:

def debugTree = fileTree(dir: "$project.buildDir/tmp/kotlin-classes/debug", excludes: fileFilter)

收件人:

def debugTree = fileTree(dir: "$project.buildDir/tmp/kotlin-classes/snapshot", excludes: fileFilter)

否则,生成的 .xml 将不会包含整个源代码的覆盖率,因此 sonarqube 将显示 0% 的覆盖率

注意:我的目标文件夹称为“快照”,但对您来说可能有所不同

关于android - SonarQube 报告中未显示测试覆盖率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54672499/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com