Unit testing 未向sonar报告单元测试成功

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

一个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, /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将附带此问题的修复程序。