我尝试在我的应用模块中代码的Android Kotlin应用的SonarQube中显示测试覆盖率。我可以生成jacoco覆盖率结果并显示SonarQube定量度量,但是问题是 SonarQube中未显示测试覆盖率:
在我的项目的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
并使用以下命令生成我的声纳分析:
gradlew sonarqube
jacoco报告生成为myAppName \ app \ build \ reports \ jacoco \ jacocoTestReport \ jacocoTestReport.xml
我在报告旁边还有一个html文件夹,在这里我可以看到我的测试覆盖率是用正确的覆盖率生成的。
所以问题是我该如何更改才能在SonarQube中显示生成的jacoco覆盖范围?
(我不确定我在应用模块build.gradle中添加的sonarqube.properties)
答案 0 :(得分:1)
很长一段时间以来我都遇到过同样的问题,解决方案是在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%的覆盖率
注意:我的目标文件夹被称为“快照”,但对您来说可能有所不同