Frage

Wir haben einen Multi bekommen wir versuchen Cobertura Testabdeckung Berichte über im Rahmen unserer mvn Website bauen laufen. Ich kann erhalten Cobertura auf die Kind-Projekte zu laufen, aber es meldet fälschlicherweise 0% Deckung, obwohl die Berichte noch die Codezeilen hervorheben, die durch die Unit-Tests getroffen wurden.

Wir sind mit mvn 2.0.8. Ich habe versucht, mvn clean site, mvn clean site:stage und mvn clean package site läuft. Ich weiß, dass die Tests ausgeführt werden, sie zeigen uns in den todsicheren Berichten (sowohl die txt / xml und Site-Berichte). Fehle ich etwas in der Konfiguration? Hat Cobertura nicht direkt mit dem Multiprojekt arbeiten?

Dies ist in der Mutter .pom:

<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>cobertura-maven-plugin</artifactId>
                <inherited>true</inherited>
                <executions>
                    <execution>
                        <id>clean</id>
                        <goals>
                            <goal>clean</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </pluginManagement>
</build>
<reporting>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>cobertura-maven-plugin</artifactId>
            <inherited>true</inherited>
        </plugin>
    </plugins>
</reporting>

Ich habe versucht, es mit und ohne die folgenden in den Kinder .poms ausgeführt wird:

    <reporting>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>cobertura-maven-plugin</artifactId>
        </plugin>
    </plugins>
</reporting>

ich dies in der Ausgabe des Builds:

...
[INFO] [cobertura:instrument]
[INFO] Cobertura 1.9 - GNU GPL License (NO WARRANTY) - See COPYRIGHT file
Instrumenting 3 files to C:\workspaces\sandbox\CommonJsf\target\generated-classes\cobertura
Cobertura: Saved information on 3 classes.
Instrument time: 186ms

[INFO] Instrumentation was successful.
...
[INFO] Generating "Cobertura Test Coverage" report.
[INFO] Cobertura 1.9 - GNU GPL License (NO WARRANTY) - See COPYRIGHT file
Cobertura: Loaded information on 3 classes.
Report time: 481ms

[INFO] Cobertura Report generation was successful.

Und der Bericht sieht folgendermaßen aus: cobertura Bericht

War es hilfreich?

Lösung

Ich vermute, dass Sie eine Ausführung cobertura Plugin während der Kompilierung-Phase sind vermisst, so dass der Code nur durch die Berichterstattung Plugins, in der Website-Lifecycle instrumentiert wird, nachdem die Tests ausgeführt wurden. So sind die Testläufe werden nicht abgeholt, weil sie auf nicht-instrumentierte Code ausführen. Analysieren Sie Ihre Build-Protokolle mehr sorgfältig - wenn ich recht habe, werden Sie feststellen, dass todsichere Tests ausgeführt werden, bevor cobertura. Instrument

Meine Konfiguration ist ähnlich wie bei Ihnen, aber zusätzlich zu der sauberen exectution in pluginManagement Angabe (wie Sie), ich das cobertura Plugin explizit in Build-Plugins Abschnitt angeben:

  <build>
  ...
    <plugins>
    ...
      <plugin>
        <inherited>true</inherited>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>cobertura-maven-plugin</artifactId>
        <version>${cobertura.plugin.version}</version>
      </plugin>
    </plugins>
  </build>

Meine Konfiguration sorta funktioniert und alle Cobertura Zeug ist in der globalen unternehmensweiten pom, die alle Projekte als Eltern verwendet werden.

Auf diese Weise Projekte nichts angeben in ihrem pom.xml die-Cobertura verwendet, aber sie immer noch Berichterstattung Berichte erstellen.

Andere Tipps

Ich habe nicht erfolgreich gewesen Cobertura bei immer Berichterstattung aus mehreren Projekten zu kombinieren. Dies hat ein Problem im Allgemeinen gewesen mit Multi-Projekt-Reporting.

Wir haben die Bewertung Sonar als eine Lösung für unsere Kennzahlen berichten. Es scheint eine große Aufgabe der Bereitstellung Zusammenfassung Metriken für Projekte, einschließlich Multi-proijects zu tun.

Die Lösung von mir implementiert ist etwas manuell, aber funktioniert. Es besteht aus mehreren Schritten ist ein Schritt, um die mehr .ser Dateien zu kombinieren, die von Cobertura erzeugt werden. Dies kann unter Verwendung des cobertura-merge Kommandozeilen-Tool in einer Maven-Aufgabe durchgeführt werden.

mit dem Ausgang Nach Sie zeigen, ist, dass die Dateien nicht wirklich instrumentiert sind, sagt es, dass nur 3 Dateien instrumentiert werden.

@Marco ist richtig, es ist nicht möglich, dies durch Maven normalerweise nur zu erreichen, als das Maven Plugin cobertura ein Merge-Ziel fehlt.

Sie können es durch eine Mischung von Maven und Ant Ziele erreichen: http://thomassundberg.wordpress.com/2012/02/18/test-coverage-in-a-multi-module-maven-project/

Dennoch, für den Fall, dass Sie ein einzelnes Projekt undertest haben, gibt es keine Notwendigkeit, zu fusionieren. Sie können im Testprojekt, kopieren Sie die SER-Datei und die instrumentierten Klassen aus dem Projekt im Test:

//in test project
<plugin> 
<groupId>com.github.goldin</groupId>
<artifactId>copy-maven-plugin</artifactId>
<version>0.2.5</version>
<executions>
    <execution>
    <id>copy-cobertura-data-from-project-under-test</id>
    <phase>compile</phase>
    <goals>
        <goal>copy</goal>
    </goals>
    <configuration>
    <resources>
        <resource>
                        <directory>${project.basedir}/../<project-under-test>/target/cobertura</directory>
                            <targetPath>${project.basedir}/target/cobertura</targetPath>
                <includes>                  
                              <include>*.ser</include>
                </includes>
           </resource>
           <resource>
                    <directory>${project.basedir}/../<project-under-test>/target/generated-classes/cobertura/</directory>
                    <targetPath>${project.basedir}/target/generated-classes/cobertura</targetPath>
                    <preservePath>true</preservePath>
           </resource>
        </resources>
            </configuration>
        </execution>
</executions>
</plugin>

//in parent project
<build>
<plugins>
    <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>cobertura-maven-plugin</artifactId>
    <configuration>
        <format>xml</format>
        <aggregate>true</aggregate>
    </configuration>
    <executions>
        <execution>
                    <goals>
                <goal>clean</goal>
            </goals>
        </execution>
    </executions>
</plugin>
    </plugins>
</build>
<reporting>
<plugins>
    <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>cobertura-maven-plugin</artifactId>
    <version>${cobertura.version}</version>
        </plugin>
</plugins>
 </reporting>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top