Pregunta

Tenemos un multiproyecto en el que estamos intentando ejecutar informes de cobertura de prueba de Cobertura como parte de la construcción de nuestro sitio mvn.Puedo hacer que Cobertura se ejecute en los proyectos secundarios, pero informa erróneamente una cobertura del 0%, aunque los informes aún resaltan las líneas de código que fueron afectadas por las pruebas unitarias.

Estamos usando mvn 2.0.8.he intentado correr mvn clean site, mvn clean site:stage y mvn clean package site.Sé que las pruebas se están ejecutando, aparecen en los informes infalibles (tanto los informes txt/xml como los del sitio).¿Me falta algo en la configuración?¿Cobertura no funciona bien con multiproyectos?

Esto está en el .pom principal:

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

Intenté ejecutarlo con y sin lo siguiente en los .poms secundarios:

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

Obtengo esto en el resultado de la compilación:

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

Y el informe se ve así:cobertura report

¿Fue útil?

Solución

Sospecho que le falta una ejecución del complemento de cobertura durante la fase de compilación, de modo que el código solo sea instrumentado por los complementos de informes, en el ciclo de vida del sitio, después de ejecutar las pruebas.Por lo tanto, las ejecuciones de prueba no se seleccionan porque se ejecutan en código no instrumentado.Analice sus registros de compilación con más cuidado; si estoy en lo cierto, notará que las pruebas seguras se ejecutan antes de cobertura: instrumento.

Mi configuración es similar a la suya, pero además de especificar la ejecución limpia en pluginManagement (como usted), especifico el complemento de cobertura explícitamente en la sección de complementos de compilación:

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

Mi configuración funciona y todo el material de Cobertura está en el pom global de toda la organización, que todos los proyectos utilizan como padre.

De esta manera los proyectos no especifican nada relacionado con Cobertura en sus pom.xml, pero aun así generan informes de cobertura.

Otros consejos

No he logrado que Cobertura combine reportajes de multiproyectos.Este ha sido un problema en general con los informes de múltiples proyectos.

hemos estado evaluando sonar como solución para nuestros informes de métricas.Parece hacer un gran trabajo al proporcionar métricas resumidas entre proyectos, incluidos proyectos múltiples.

La solución implementada por mí es algo manual, pero funciona.Consta de varios pasos, uno de los cuales es un paso para combinar los diversos archivos .ser que genera Cobertura.Esto se puede hacer utilizando la herramienta de línea de comandos cobertura-merge dentro de una tarea de Maven.

Según el resultado que muestra, los archivos en realidad no están instrumentados, indica que solo 3 archivos están instrumentados.

@Marco tiene razón, no es posible lograr esto normalmente a través de maven solo porque al complemento de cobertura de maven le falta un objetivo de fusión.

Puedes lograrlo mediante una combinación de objetivos de maven y ant: http://thomassundberg.wordpress.com/2012/02/18/test-coverage-in-a-multi-module-maven-project/

Sin embargo, en el caso de que tenga un solo proyecto bajo prueba, no es necesario fusionarlo.Puede, en el proyecto de prueba, copiar el archivo .ser y las clases instrumentadas del proyecto bajo prueba:

//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>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top