Hacer que Maven ejecute todas las pruebas, incluso cuando algunas fallan

243

Tengo un proyecto con varios módulos. Cuando pasan todas las pruebas, la prueba de Maven las ejecuta a todas.

Cuando las pruebas fallan en el primer módulo, maven no continuará con el próximo proyecto. Tengo testFailureIgnore establecido en verdadero en la configuración de Surefire, pero no ayuda.

¿Cómo hago para que maven ejecute todas las pruebas?

ripper234
fuente
¿Qué versión del complemento maven-surefire?
Pascal Thivent

Respuestas:

359

De la documentación de Maven Embedder :

-fae, --fail-at-end Solo falla la construcción después; permitir que continúen todas las compilaciones no afectadas

-fn, --fail-never NUNCA falle la compilación, independientemente del resultado del proyecto

Entonces, si está probando un módulo, está seguro de usarlo -fae.

De lo contrario, si tiene varios módulos y desea que se prueben todos (incluso los que dependen del módulo de pruebas fallidas), debe ejecutar mvn clean install -fn.
-faecontinuará con el módulo que tiene una prueba fallida (ejecutará todas las demás pruebas), pero se omitirán todos los módulos que dependen de él.

déspota
fuente
1
Además, puede agregar -e para que el cmd proporcione información de error.
déspota el
11
Acabo de probar la opción --fail-never. Maven no fallará la compilación incluso si hay errores de compilación. Si uso esta opción en Jenkins, la compilación parece exitosa incluso si tiene muchos errores de compilación. Prefiero -Dmaven.test.failure.ignore=trueen este caso y dejar que Jenkins analice los informes infalibles.
fuemf5
@wlnirvana He editado la publicación ahora con este enlace (así que siéntete libre de eliminar tu comentario ...)
Steve Chambers
93

Acabo de encontrar el parámetro "-fae", que hace que Maven ejecute todas las pruebas y no se detenga en caso de falla.

ripper234
fuente
3
Lamentablemente, este parámetro no funciona cuando lo paso a TeamCity.
ripper234
44
En un proyecto de varios módulos, se omitirán los módulos que dependen del módulo que ha fallado las pruebas. Use -fn en su lugar.
hipokito
2
@ ripper234 ¿encontraste una manera de hacerlo funcionar en TeamCity?
Jeredriq Demas
86

¿Puede probar con surefire 2.6 y configurar surefire con testFailureIgnore=true. O en la línea de comando:

mvn install -Dmaven.test.failure.ignore=true
Pascal Thivent
fuente
16
IIRC tiene el efecto de que toda la compilación no falla, en lugar de ejecutar todas las pruebas y fallar al final.
Ondra Žižka
1
Esta es la única opción que funcionó para mí ... La opción "-fae" no hizo nada en las fallas de prueba
Yoi
38

Intente agregar la siguiente configuración para el complemento surefire en su pom.xml del proyecto raíz :

<project>
  [...]
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <configuration>
          <testFailureIgnore>true</testFailureIgnore>
        </configuration>
      </plugin>
    </plugins>
  </build>
  [...]
</project>
nybon
fuente
17

Una respuesta rapida:

mvn -fn test

Funciona con proyectos anidados.

rustyx
fuente