Unit testing 未向sonar报告单元测试成功
一个gradle构建正在创建一份jacoco报告,由sonar runner获取。sonar结果推送到sonar服务器后,将显示单元测试覆盖率,但即使所有测试都成功运行,单元测试成功率仍为0 查看sonar runner日志,我看到以下项目报告了源和类的位置:Unit testing 未向sonar报告单元测试成功,unit-testing,gradle,sonarqube,Unit Testing,Gradle,Sonarqube,一个gradle构建正在创建一份jacoco报告,由sonar runner获取。sonar结果推送到sonar服务器后,将显示单元测试覆盖率,但即使所有测试都成功运行,单元测试成功率仍为0 查看sonar runner日志,我看到以下项目报告了源和类的位置: 15:52:36.087 INFO - Source dirs: /poc-sonar/src/main/java 15:52:36.087 INFO - Test dirs: /poc-sonar/src/test/java, /V
15:52:36.087 INFO - Source dirs: /poc-sonar/src/main/java
15:52:36.087 INFO - Test dirs: /poc-sonar/src/test/java, /Volumes/Disk/Development/poc-sonar/src/test/groovy
15:52:36.088 INFO - Binary dirs: /poc-sonar/build/classes/main
这提出了第一个问题:Sonar是否必须查看编译的测试类进行分析
再往下看:
15:52:37.435 INFO - Sensor JaCoCoSensor...
15:52:37.445 INFO - Analysing /poc-sonar/build/jacoco/test.exec
15:52:37.546 INFO - No information about coverage per test.
15:52:37.548 INFO - Sensor JaCoCoSensor done: 113 ms
15:52:38.105 INFO - Execute decorators...
15:52:38.580 INFO - Store results in database
Jacoco已经获取了test.exec
文件,但是报告“没有关于每个测试覆盖率的信息”
日志声明是什么意思?声纳服务器实际上显示了正确的覆盖范围!这是声纳报告的测试失败的指标吗?获取该单元缺少什么
Unit Tests Coverage
50,0%
50,0% line coverage
Unit test success
0 tests
完整的gradle build.script:
ext {
spockVersion = '0.7-groovy-2.0'
groovyVersion = '2.2.1'
}
apply plugin: 'idea'
apply plugin: 'java'
apply plugin: 'groovy'
apply plugin: 'jacoco'
apply plugin: 'sonar-runner'
group = "poc"
version = "1.0.0-SNAPSHOT"
sourceCompatibility = 1.7
targetCompatibility = 1.7
repositories {
maven {
credentials {
username "${artifactoryUsername}"
password "${artifactoryPassword}"
}
url "${artifactoryContextUrl}"
}
}
dependencies {
testCompile "junit:junit-dep:4.11"
testCompile "org.codehaus.groovy:groovy-all:$groovyVersion"
testCompile "org.spockframework:spock-core:$spockVersion"
}
tasks.withType(Test) { task ->
jacoco {
destinationFile = file("$buildDir/jacoco/${task.name}.exec")
}
}
sonarRunner {
sonarProperties {
property 'sonar.projectName', rootProject.name
property 'sonar.projectDescription', rootProject.name
// sonar server and database
property "sonar.host.url", sonarHostUrl
property "sonar.jdbc.url", sonarJdbcUrl
//property "sonar.jdbc.driverClassName", "com.mysql.jdbc.Driver"
property "sonar.jdbc.username", sonarJdbcUsername
property "sonar.jdbc.password", sonarJdbcPassword
property 'sonar.sourceEncoding', 'UTF-8'
}
}
tasks.sonarRunner.dependsOn = []
在最新的Sonar版本中,测试报告位置的Sonar属性已从
Sonar.surefire.reportsPath
重命名为Sonar.junit.reportsPath
。因此,您可能必须手动设置后者。例如:
apply plugin: "sonar"
subprojects {
apply plugin: "java"
sonarRunner {
sonarProperties {
property "sonar.junit.reportsPath", test.reports.junitXml.destination
}
}
}
再次查看日志后,我又发现了一个可疑警告:
16:31:18.438警告-未找到报告路径:/poc sonar/build/sonar/build/surefire Reports
sonar runner正在错误的位置查找测试报告文件。问题是如何将Sonar runner配置为查看$project.buildDir/test results
,这是测试报告输出的默认值?+1:属性“Sonar.junit.reportsPath”,“$buildDir/test results/”
为我解决了这个问题。Gradle 1.12将附带此问题的修复程序。