Problèmes de génération de rapports Cobertura multi-projets Maven au cours de la construction du site mvn

StackOverflow https://stackoverflow.com/questions/94556

Question

Nous avons un multiprojet pour lequel nous essayons de générer des rapports de couverture de tests Cobertura dans le cadre de la création de notre site MVN. Cobertura peut s'exécuter sur les projets enfants, mais il signale à tort une couverture de 0%, même si les rapports mettent en évidence les lignes de code affectées par les tests unitaires.

Nous utilisons MVN 2.0.8. J'ai essayé d'exécuter site propre mvn , site propre mvn: stage et site de package propre mvn . Je sais que les tests sont en cours, ils apparaissent dans les rapports infaillibles (rapports txt / xml et site). Est-ce que je manque quelque chose dans la configuration? Cobertura ne fonctionne-t-il pas correctement avec les multiprojets?

Ceci est dans le parent .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>

J'ai essayé de l'exécuter avec et sans les éléments suivants dans l'enfant .poms:

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

Je reçois ceci dans la sortie de la construction:

...
[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.

Et le rapport ressemble à ceci: rapport cobertura

Était-ce utile?

La solution

Je soupçonne qu'une exécution du plug-in cobertura est manquante pendant la phase de compilation afin que le code ne soit instrumenté que par les plug-ins de rapport, dans le cycle de vie du site, après l'exécution des tests. Ainsi, les tests ne sont pas pris en charge car ils fonctionnent sur du code non instrumenté. Analysez plus attentivement vos journaux de construction - si j'ai raison, vous remarquerez que des tests infaillibles sont exécutés avant cobertura: instrument.

Ma configuration est similaire à la vôtre, mais en plus de spécifier l’exécution propre dans pluginManagement (comme vous), je spécifie explicitement le plugin cobertura dans la section plugins de construction:

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

Ma configuration fonctionne en quelque sorte, et tous les éléments Cobertura se trouvent dans le pom global de l'organisation, que tous les projets utilisent en tant que parent.

De cette manière, les projets ne spécifient rien de ce qui concerne Cobertura dans leur pom.xml, mais ils génèrent toujours des rapports de couverture.

Autres conseils

Je n'ai pas réussi à amener Cobertura à combiner le reporting de plusieurs projets. Cela a été un problème en général avec les rapports multi-projets.

Nous évaluons le sonar comme solution pour la production de rapports sur nos métriques. Il semble fournir d'excellents résultats pour tous les projets, y compris les projets multiples.

La solution que j'ai mise en place est quelque peu manuelle, mais fonctionne. Il consiste en plusieurs étapes dont l’une est une étape consistant à combiner les différents fichiers .ser générés par Cobertura. Pour ce faire, utilisez l'outil de ligne de commande cobertura-merge dans une tâche maven.

Selon le résultat que vous montrez, c'est que les fichiers ne sont pas réellement instrumentés, cela indique que seuls 3 fichiers sont instrumentés.

@Marco a raison, il n'est pas possible d'y parvenir normalement par le biais de maven uniquement, car le plug-in maven cobertura manque d'un objectif de fusion.

Vous pouvez y parvenir en combinant objectifs Maven et Ant: http://thomassundberg.wordpress.com/2012/02/18/test-coverage-in-a-multi-module-maven-project/

Néanmoins, dans le cas où vous avez un seul projet souscrit, il n’est pas nécessaire de fusionner. Vous pouvez, dans le projet de test, copier le fichier .ser et les classes instrumentées du projet à tester:

//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>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top