eclemma
Meistens benutze ich für die Messung der Code-Coverage von Tests
EclEMMA, da dieses als Eclipse-Plugin die Code-Coverage direkt in Eclipse anzeigt.
Zwei Probleme habe ich allerdings mit EclEMMA festgestellt:
- In Testmethoden, die eine Exception werfen sollen, kann EclEMMA die Testcoverage nicht korrekt feststellen (siehe dort in der FAQ).
- In multi-Threaded Tests terminierte Thread.sleep() in einigen Fällen nie (hing sich auf).
Wenn man JUnit Tests, die dies betrifft, unter eclemma auslassen will, sie aber beim normalen Unit-Testlauf mit ausführen kann, hilft folgende Zeile in der Testmethode:
if ( System.getProperty("java.class.path").contains(".eclemma.") )
return;
djunit
djunut, ein weiteres Eclipse-Plugin für Code-Coverage kommt leider auch mit Threads oft nicht klar:
Exception in thread "Thread-1" java.util.ConcurrentModificationException
Leider habe ich keine Lösung für das Problem. Ohne Threads funktioniert aber djunit auch zufriedenstellend.
cobertura
Ein sehr schönes weiteres Code-Coverage Werkzeug ist allerdings mit
Cobertura verfügbar, welches es auch als Maven 2 Plugin gibt, leider nicht als Eclipse-Plugin.
Hier der nötige Ausschnitt aus der pom.xml:
<project>
...
<dependencies>
...
<dependency>
<groupId>org.codehaus.mojo</groupId>
<artifactId>cobertura-maven-plugin</artifactId>
<version>2.2</version>
<scope>test</scope>
</dependency>
...
</dependencies>
...
<reporting>
...
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>cobertura-maven-plugin</artifactId>
<configuration>
<formats>
<format>html</format>
<format>xml</format>
</formats>
</configuration>
</plugin>
</plugins>
...
</reporting>
</project>
Aufgerufen wird Cobertura dann so:
mvn cobertura:cobertura
Dabei führt es dann die Tests unter Cobertura aus und generiert einen Bericht in HTML und XML nach target/target/site/cobertura/, der unter target/site/cobertura/index.html mit einem Browser betrachtet werden kann.
Twitter
Facebook
Reddit
LinkedIn
StumbleUpon
Email