我正在尝试使用Jacoco进行声纳设置以command line arguments生成代码覆盖率报告,但它没有显示任何代码覆盖率。在检查Sonar控制台时,它显示以下错误。任何人之前都遇到过这个问题,任何建议可能会错过。
元信息
插件使用sonarqube版本“2.6.1”
gradleVersion ='3.0.1'
kotlinVersion ='1.2.21'
Sonarqube version = Version 6.7.1(build 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")
}
按照gradle命令我用来生成Jacobo报告&然后飙升报告。
./gradlew clean jacocoTestReport sonarqube
我观察到以后我必须找到一些路径。
未收集覆盖范围信息。也许你忘了包括 将信息调试到编译的类中?
对不起,如果这看起来有点长;但这是我发现在一个地方总结的最好的。还请注意我尝试使用Java类进行类似的设置,而不是使用kotlin来生成带代码覆盖率的报告。
答案 0 :(得分:0)
如果你正在使用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'
...
}
}
答案 1 :(得分:0)
要使Kotlin正常工作,您需要做的事情很少。
import inspect
class Foo:
def __init__(self, arg1, arg2):
self.arg1 = arg1
self.arg2 = arg2
def bar(self):
temp_bar = Bar()
# Creates a dummy object
dummy = dir(type('Dummy', (object,), {}))
# Iterates through all Foo object's attributes
for item in inspect.getmembers(self):
# Since the dummy object only has built-in attributes,
# only custom-created ones will be used (in this case arg1 and arg2)
if item[0] not in dummy:
# Copies each attribute to temp_bar
setattr(temp_bar, *item)
return temp_bar
class Bar(Foo):
# Overrides the __init__ method
def __init__(self):
pass
if __name__ == '__main__':
foo = Foo(1, 2)
print(foo.bar().arg1)
print(foo.bar().arg2)
在build.gradle中添加属性以搜索jacoco结果。
plugins {
id "jacoco"
id "org.sonarqube" version "2.7.1"
}
在该URL后面输入属性:https://docs.sonarqube.org/7.5/analysis/analysis-parameters/