2016-02-16 6 views
12

Ich kann nicht verstehen, wie Cobertura mit JUnit zusammenarbeitet. Wie ich verstanden habe, modifiziert cobertura kompilierten Byte-Code und fügt in diesem Byte-Code seine eigenen Befehle ein. OK. Danach führen wir das Junit-Framework aus und geben es unseren Tests zum laufen. Könnte irgendjemand erklären, an welchen Punkten cobertura die Information bekommt, welche seiner Befehle ausgeführt wurden?Wie arbeitet Cobertura mit JUnit?

Antwort

7

Cobertura verwendet ASM, das ein universelles Bytecode-Manipulations-und Analyse-Framework ist. In jeder Zeile des Java-Codes sind 3 Zeilen zu den vorhandenen Klassen hinzugefügt, um die Dinge für den erzeugten Bericht zu zählen. Wenn Cobertura in Ihren Klassenpfad aufgenommen und korrekt konfiguriert ist und Sie Ihre Komponententests ausführen, wird eine Datendatei mit dem Namen cobertura.server erstellt, die zum Erstellen eines XML- oder HTML-Berichts verwendet wird.

Grund Nutzung: mit Maven: http://www.mojohaus.org/cobertura-maven-plugin/usage.html

+0

Vielen Dank für Ihre Antwort gefunden werden. Allerdings verstehe ich nicht - wir laufen junit nicht cobertura. Wie werden aus diesen 3 Zeilen zusätzliche Code-Berichte generiert? Sendet jeder von diesen 3 Zeilen Code an cobertura.server? –

+0

Cobertura wird automatisch instrumentiert, wenn Sie Ihre Komponententests ausführen. Es ist eine Art Wrap-Around-Sache, die automatisch passiert, wenn Sie es in Ihrem POM (bei Verwendung von Maven) oder in der Datei build.xml (bei Verwendung von ANT) konfiguriert haben. Sie führen es nicht direkt aus, aber es wird über das Maven-Plugin aufgerufen, wenn es richtig konfiguriert ist. HTH – Griff

2

Cobertura Tests überwacht durch den Bytecode mit zusätzlichen Anweisungen instrumentiert, welche Linien zu protokollieren sind und nicht erreicht werden, wie die Testsuite ausgeführt wird.

Cobertura berechnet die Abdeckung sowohl anhand der Anzahl der getesteten Linien als auch anhand der Anzahl der getesteten Zweige. Für einen ersten Durchgang ist der Unterschied zwischen diesen beiden nicht sehr wichtig. Cobertura berechnet auch die durchschnittliche zyklische Komplexität von McCabe für die Klasse.

Wenn Maven verwenden kann dies in POM konfiguriert werden:

<plugin> 
     <groupId>org.codehaus.mojo</groupId> 
     <artifactId>cobertura-maven-plugin</artifactId> 
     <version>2.6</version> 
     <configuration> 
      <formats> 
       <format>html</format> 
       <format>xml</format> 
      </formats> 
     </configuration> 
    </plugin> 

Wenn ANT verwendet es kann mit der taskdef Anweisung in der Datei build.xml konfiguriert werden:

<taskdef classpathref="cobertura.classpath" resource="tasks.properties"/> 

Referenz für Ameisen Cobertura Integration kann bei https://github.com/cobertura/cobertura/wiki/Ant-Task-Reference

+0

Vielen Dank für Ihre Antwort. Die Frage ist jedoch nicht, wie man cobertura mit Maven oder Ameisen laufen lässt. Die Frage ist, wie Cobertura mit Junit zusammenarbeitet. –