2010-09-09 3 views
5

Gibt es ein Tool für Java, das Ihnen bei einer Reihe von JUnit-Tests und einer zu testenden Klasse sagt, welche Zeilen der Klasse durch die Tests getestet werden? dh. benötigt, um für die Tests vorhanden zu sein, um erfolgreich zu laufen. Ich meine nicht "Code Coverage", die nur sagt, ob eine Zeile ausgeführt wird, aber etwas stärker als das: Ist die Zeile für den Test bestanden?Gibt es ein Tool für Java, das herausfindet, welche Codezeilen durch bestimmte JUnit-Tests getestet werden?

Ich entziffere oft eine Codezeile und führe einen Test durch, um zu sehen, ob der Test wirklich diese Codezeile testet. Ich denke, das könnte automatisch von einem semi-intelligenten Werkzeug (z. B. etwas wie eine IDE, die herausfinden kann, was aus einer Methode entfernt werden kann, während es kompilierbar bleibt) erfolgen.

+0

Als eine Nebenbemerkung glaube ich, dass pure TDD würde die Notwendigkeit für ein solches Werkzeug zu beseitigen, aber es würde in der Tat sehr nützlich sein, wenn Komponententests für bestehenden (Legacy) Code schreiben. –

+0

@ Péter Nur wahr, wenn Sie von vorne anfangen können, aber es gibt immer Legacy-Code um;) – atamanroman

+0

@ Péter, @fielding: Auch für Green-Field-Zeug Code-Coverage-Tools sind eine große Hilfe. –

Antwort

4

Es gibt ein Open-Source-Mutationstest-Tool namens Jester, das die Zeilen Ihres Quellcodes ändert, dann Ihre Tests ausführt und meldet, ob Ihre Tests trotzdem bestanden haben. Klingt näher an dem, wonach Sie suchen, als Code-Coverage-Tools.

Jester ist ein Test-Tester zum Testen Ihrer Java-JUnit-Tests (Pester ist für Python PyUnit-Tests). Es ändert Ihren Quellcode, führt die Tests und Berichte aus, wenn die Tests trotz der Änderungen am Code bestehen. Dies kann auf fehlende Tests oder redundanten Code hinweisen.

WRT die Diskussion darüber, ob diese Tools in einem reinen TDD-Projekt benötigt werden, gibt es einen Link auf der Jester Projekt-Webseite zu einem Posting über die Vorteile des auf Code Jester mit während einer TDD-Sitzung (Onkel Bob geschrieben berüchtigt Bowling TDD Beispiel).

2

Ich verwende emma für die meisten meiner Projekte. i eingeschlossen es in meiner Ant-Build-Datei und erzeugt HTML-Dateien für die Berichte

zwei weitere Berichterstattung Projekte i zu lesen, aber noch nicht versucht sind clover oder cobertura

2

I cobertura lieben, weil die erzeugten Berichte IMHO der schönste. Und es hat sein eigenes Ameisenziel!

Im Vergleich zu Emma, ​​hat es auch Zweigabdeckung, nicht nur Linienabdeckung, die sehr oft irreführend ist.

+0

+1 IMO Cobertura ist die beste Lösung für dieses Problem – bwawok

+0

Cobertura ist ideal für die Code-Abdeckung, aber ich denke, das OP ist auf der Suche nach Assertion Coverage. Z.B. Sie können 100% Codeabdeckung haben, aber nichts behaupten. Das OP sucht nach einem Tool, mit dessen Hilfe festgestellt werden kann, wo Behauptungen fehlen. –

3

Was Sie suchen, wird möglicherweise als mutation testing bezeichnet. Während des Mutationstests erfahren Sie nicht, welche Codezeilen als solche übergeben werden müssen. Beim Mutationstest wird der Quellcode geändert, um nach Änderungen zu suchen, die er an Ihrem Code vornehmen kann, aber Ihr Test wird trotzdem bestanden. Z.B.

Ändern
if (a < b) 

zu

if (a >= b) 

und zu sehen, ob der Test besteht nach wie vor. Dies wird Schwachstellen in Ihrem Test aufzeigen.

Eine andere Java-Bibliothek für Mutationstests ist jumble.

Verwandte Themen