43

Was sind die verfügbaren Code-Coverage-Tools für Scala?Code Coverage Tools für die Scala

Ich habe Scala Spec Tests und ein Hudson Continuous Integration Setup. Gibt es etwas, das ich in dieses Setup einbinden kann, um die Codeabdeckung zu messen und zu verfolgen?

+3

ist es für mich erstaunlich, dass dies als nicht konstruktiv geschlossen wurde. Verdammt, 33 Leute haben es geupdated.6 Leute antworteten mit 43 Upvotes. aber irgendwie ist es für die Gemeinschaft nicht konstruktiv? 'cmon, Sie alle. Mit größtem Respekt und Liebe würde ich vorschlagen, ein wenig über Pädagogik zu lernen und die "Regeln" unseres "Q & A-Formats" zu ändern. –

+1

Einverstanden. Wenn Ihnen das Schließen nicht gefällt, stimmen Sie ab, um es wieder zu öffnen. –

+2

Ich wünschte, ich hätte 3000 Ruf, also kann ich wählen, um wieder zu öffnen ... – FelixM

Antwort

9

Ich verwende Cobertura. Jedoch sollte jedes Java-Coverage-Tool gut funktionieren. Der einzige Haken ist, dass Sie eine große Anzahl von automatisch generierten Klassen in Ihrer Versorgungsliste haben. Dies liegt daran, dass Scala, während Scala in einen sehr natürlichen JVM-Bytecode kompiliert, gezwungen ist, eine unnatürlich große Anzahl von Klassen zu erzeugen, um gemeinsame funktionale Merkmale wie eine verzögerte Bewertung zu berücksichtigen.

+0

Dies ist das klassische Problem der Instrumentierung etwas anderes als der Quellcode: Sie Lärm die Antwort. Sehen Sie sich die Diskussion verwandter Probleme an, wenn Sie Klassendateien statt Quelldateien in dieser SO instrumentieren: http://stackoverflow.com/a/15260092/120163 –

18

SCCT ist eine Compiler-Plugin, welche Instrumente der Klassen Berichterstattung Daten zu sammeln:

http://mtkopone.github.com/scct/

+0

afaik gibt es keine Möglichkeit, SCCT in Hudson zu haken? –

+2

SCCT ist jetzt Verdeckung. – mmlac

8

Ein Problem bei Nicht-Mainstream-Sprachen (wie Scala) ist, dass Werkzeuge schwer zu finden sind, weil sie schwer zu bauen.

Dieses technische Papier Branch Coverage for Arbitrary Languages Made Easy (ich bin der Autor) beschreibt, wie die Testabdeckung Werkzeuge für den langauges in systematischer Weise zu bauen, um dieses Problem zu helfen zu bekommen, eine generische Werkzeug-Gebäude-Infrastruktur verwenden.

Wir haben test coverage tools for Java, C#, COBOL, C, C++, PL/SQL, ... auf diese Weise implementiert, einschließlich Instrumenten, Datenerfassung und Testabdeckung Anzeige und Berichterstattung. Es wäre einfach Scala so zu implementieren.

Die Lösungen anderer Antworten führen zu verwirrenden Informationen bei der Implementierung von Scala ("auto generated classes"). Was Entwickler sehen möchten, sind Coverage-Daten in Bezug auf ihren Code. Der von uns verwendete Ansatz instrumentiert den Quellcode, so dass die Ergebnisse vollständig und nur in Bezug auf den Quellcode angegeben werden; Sogar der Test-Coverage-Viewer zeigt den Quellcode, der mit Coverage-Informationen abgedeckt ist.

2

Ich benutze jacoco. Es erfordert keine Kompilier- oder Laufzeitabhängigkeit, Instrumentenklassen im laufenden Betrieb ohne spezielle Instrumentierungsphase.

Auch es integriert mit Sonar und veröffentlicht auf Maven Central.

Hier ist Beispiel: https://github.com/Godin/sonar-experiments/tree/master/jacoco-examples/scala-example

Ich mag würde eine bessere Berichterstattung hinzuzufügen: detaillierteren Zweigüberdeckung makrup, ohne von generierten Klassen/Methoden und wie ScalaDoc handlich zu sein (siehe SCCT Berichte zum Beispiel)

3

ich habe eine SBT-Plugin zusammen genannt xsbt-coveralls-plugin die SCCT unter der Haube verwendet, aber die Ergebnisse zu http://coveralls.io veröffentlicht.

Haftungsausschluss:Ich habe nur gerade dieses Plugin gebaut gestern (10. März 2013) also nicht erwarten, es noch perfekt sein, aber

auf die GitHub Seite Bugs und Feature-Anfragen senden Sie Dennoch ist es gut, wenn Sie Coverage-Berichte so kodieren möchten, dass sie öffentlich sichtbar sind. Schauen Sie sich ein Beispiel der Ergebnisse