2014-02-25 6 views
5

Ich habe sehr erfolgreich Gradle (1.11), Sonar (4.1.1), Java, Scala und Jacoco in meinem Build-Prozess integriert. Ich habe sogar Informationen über die Anzahl der erfolgreichen Tests erhalten (dank Stackoverflow!). Ich habe jedoch ein Problem.Integrieren von Sonar, Jacoco, Gradle, ScalaTest mit Junit, Java

Ich kann nicht scheinen, Informationen über Abdeckung pro Test zu erhalten. Es wäre sehr schön, diese Informationen zu haben.

> 15:11:16.514 INFO - Sensor JaCoCoSensor... 15:11:16.535 INFO - 
> Analysing C:\example\gradle-sonar-jacoco-scala\build\jacoco\test.exec 
> 15:11:17.887 INFO - No information about coverage per test. 

Eine vereinfachte Version des Projekts ist unter: https://github.com/sebastianharko/gradle-sonar-java-jacoco-scalatest-junit

Prost!

+0

Sind Sie sicher, dass es in Sonar eine solche Funktion gibt? Kannst du bitte ein paar Hinweise zeigen? Ich beurteile auch Sonar + Maven, kam aber nicht weiter, als die allgemeine Codeabdeckung zu beobachten. – Tair

+0

Oh, ich habe es gefunden! Wenn Sie dieses Problem nicht haben, würde ich nicht einmal über diese Funktion wissen :) Also, danke! – Tair

+0

Ihr GitHub-Beispiel ist für Scala-Code, der Java-Code testet. Haben Sie mit Scala Testing Coverage Reporting Scala oder Java Testing Java getestet? Ich frage, weil ich einige Scala-Projekte baue und immer Scala und Java separat kompiliere und teste. – n0741337

Antwort

0

Es sieht aus wie Sie bereits

apply plugin: 'jacoco' 

in Ihrem gradle.build

Aber ich auf eine Definition zu sehen bin nicht, wo es ist es aus in der gradle.build

Datei zu erhalten
jacoco { 
    destinationFile = file("$buildDir/jacoco/test.exec") 
} 

Wenn Sie Integration und Komponententests durchführen möchten, sieht es wie folgt aus:

task "integtest"(type: Test, dependsOn: integtestClasses) { 
testClassesDir = sourceSets.integtest.output.classesDir 
classpath = sourceSets.integtest.runtimeClasspath 

    jacoco { 
     destinationFile = file("$buildDir/jacoco/integTest.exec") 
    } 
} 
test { 
    jacoco { 
    destinationFile = file("$buildDir/jacoco/test.exec") 
    } 
} 

Mit den entsprechenden Sonar Konfigurationselemente

property "sonar.jacoco.reportPath", "$buildDir/jacoco/test.exec" 
property "sonar.jacoco.itReportPath", "$buildDir/jacoco/integTest.exec" 
+0

Vielen Dank für die Antwort, aber es löst nicht mein Problem: 1) Ich habe zu diesem Zeitpunkt keine Integrationstests, nur Komponententests; 2) Jacoco funktioniert einwandfrei, die Codeabdeckung wird im Sonar Web Interface angezeigt; Das Problem ist, dass ich keine "Abdeckung pro Einzeltest" sehe. Wenn ich also einen Test namens test1() und einen Test namens test2() habe, würde ich gerne sehen, dass test1() 10% des Codes abdeckt , test2() deckt zum Beispiel 30% des Codes ab. – MadSeb

+0

Nach dem Code, den ich in GitHub sehe Ihr Sonar Sonar auf die Jacoco-Datei ohne Angabe von Jacoco, wo die .Exec setzen zu sehen. Wo kommt das Setzen der Zieldatei ins Spiel? – RGG

+0

gut sonar somohow findet heraus, wo die jacoco-Datei ist: Siehe den ursprünglichen Beitrag: "Analysieren C: \ Beispiel \ grdle-Sonar-jacoco-scala \ build \ jacoco \ test.exec"; Der Standort der jacoco-Datei scheint also nicht das Problem zu sein, aber ich werde das überprüfen; – MadSeb

-3

Sie können auch Coveralls.io

Es ist sehr billig verwenden möchten. und Sie würden eine tiefe Integration mit Ihren Pull-Requests auf Github haben (verfolgen Sie, wenn ein Zweig Ihre Code-Abdeckung erhöht oder verringert), sowie a very nice UI, um einen Drilldown in Ihre Code-Coverage durchzuführen.

Beide SBT und Gradle Integrationen sind verfügbar.