2014-01-24 17 views
9

Ein gradle Build ist die Schaffung eines jacoco Bericht Sonar, die durch Sonar Läufer aufgenommen wird. Nachdem die Sonarergebnisse an den Sonarserver übertragen wurden, wird die Einheitentestabdeckung angezeigt, der Komponententesterfolg ist jedoch 0, obwohl alle Tests erfolgreich ausgeführt wurden.Keine Einheit Test Erfolg berichtet

Mit Blick auf dem Sonar-runner Protokoll sehe ich die folgenden Elemente, die Quelle und Klassen Standorte berichten:

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 

Dies ist die erste Frage aufwirft: Ist Sonar hat die kompilierten Testklassen für die Analyse zu sehen?

Weiter unten in dem Protokoll:

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 hat nahm die test.exec Datei, aber die Berichterstattung "No information about coverage per test"

Was bedeutet, dass Log-Anweisung bedeuten? Der Sonarserver deckt tatsächlich die korrekte Abdeckung auf! Ist das ein Indikator für den fehlenden Sonar-Testerfolg? Was

Unit Tests Coverage 
50,0% 
50,0% line coverage 

Unit test success 
0 tests 

Der vollständige gradle build.script die Einheit fehlt für immer:

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 = [] 
+1

Nachdem durch das Protokoll ging wieder Ich habe eine misstrauische Warnung gefunden: '16: 31: 18,438 WARN - Berichte Pfad nicht gefunden:/PoC-Sonar/build/Sonar/build/todsicheren -reports' Sonar Läufer suchen die Prüfbericht Datei in der falschen Stelle. Die Frage ist, wie kann der Sonar-Runner so konfiguriert werden, dass er in '$ project.buildDir/test-results' nachschaut, was der Standard für die Testberichtausgabe ist? –

Antwort

16

In den letzten Sonar-Versionen hat die Sonar-Eigenschaft für Prüfbericht Standort wurde von sonar.surefire.reportsPath zu sonar.junit.reportsPath umbenannt. Daher müssen Sie das letztere möglicherweise manuell festlegen. Zum Beispiel:

apply plugin: "sonar" 

subprojects { 
    apply plugin: "java" 
    sonarRunner { 
     sonarProperties { 
      property "sonar.junit.reportsPath", test.reports.junitXml.destination 
     } 
    } 
} 
+1

+1: 'Eigenschaft "sonar.junit.reportsPath", "$ builddir/Testergebnisse /"' tat mir den Trick. –

+3

Gradle 1.12 wird mit einem Fix für dieses Problem geliefert. –

+0

Es hat wirklich funktioniert. Vielen Dank! –

Verwandte Themen