我在Sonar中的代码覆盖率显示0%,因为我有单元测试,所以不是真的。
摇篮
sonarqube {
properties {
property "sonar.binaries", "build/intermediates/classes/release"
property "sonar.java.binaries", "build/intermediates/classes/release"
property "sonar.java.test.binaries", "build/intermediates/classes/test/release"
property "sonar.sources", "src"
property "sonar.junit.reportsPath", "build/reports/tests/release"
property "sonar.java.junit.reportsPath", "build/reports/tests/release"
property "sonar.android.lint.report", "build/outputs/lint-results.xml"
property "sonar.jacoco.reportPath", "${project.buildDir}/jacoco/testReleaseUnitTest.exec"
}
}
当我在index.html
内打开build/reports/tests/release
时,我可以看到成功的单元测试。
我在Jenkins环境中运行sonarqube
作为gradle task
。我的SonarQube实例显示Code Smells
以及除code coverage
之外的所有内容,它显示 0%。
更新
我为代码覆盖率创建了一个index.html
,但它们也显示为0%:
app/build/reports/jacoco/jacocoTestDebugUnitTestReport/html/index.html
更新
仍然是0%,但这是我到目前为止:
android {
...
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
testCoverageEnabled true
}
debug {
testCoverageEnabled true
}
}
jacoco {
version "0.7.8.201607051106"
}
}
答案 0 :(得分:2)
Java插件重用报告;它不会生成它们。因此,在尝试配置分析以导入这些报告之前,请确保它们已正确生成且非空。
由于您似乎没有使用Gradle Jacoco plugin,因此SonarQube可能会报告0%,因为您尚未生成报告。您需要在构建中添加Jacoco,并确保为SonarQube提供生成的报告(sonar.jacoco.reportPath
)的路径,以便它可以读取它。
要将Jacoco添加到项目中,您需要将以下内容添加到build.gradle
:
//...
apply plugin: "jacoco"
//...
jacoco {
toolVersion = "0.7.6.201602180812"
//Note: unless "reportsDir" is set here, default is “$buildDir/reports/jacoco”
}
您还需要确保以下内容:首先,您需要确保正在执行jacocoTestReport
任务(通过自己将任务添加到任务中;或者将任务添加到您的gradle调用中)。其次,您需要确保SonarQube正在查找测试报告的正确位置,方法是将sonar.jacoco.reportPath
设置为指向您的/reports/jacoco
目录(它默认为target/jacoco.exec
,因此它赢了“找到有关默认设置的报告)。
答案 1 :(得分:1)
我使用this插件解决了这个问题。我看到的问题是Jacoco试图寻找仪器测试androidTests
而不是单元测试tests
。我使用的插件确保它预先运行测试,根据测试创建报告并使Jacoco指向那些测试。