test plugin failsafe example maven build integration-testing maven-surefire-plugin maven-failsafe-plugin

plugin - maven test integration



Evitar pruebas unitarias en maven pero permitir pruebas de integraciĆ³n (6)

Tengo una versión maven en la que uso el plugin SureFire para ejecutar algunas pruebas unitarias y el plugin FailSafe para ejecutar algunas pruebas de integración. Me gustaría una forma de ejecutar solo las pruebas del complemento FailSafe.

No es una buena solución para mí agregar perfiles diferentes o cualquier cosa en el pom, porque es una compilación de varios módulos y no quiero tener que editar el pomo de cada módulo.

Hay skip.tests y maven.test.skip y skipTests que detienen todas las pruebas, y skipITs , que detiene solo el plugin de failsafe.

Entonces, ¿hay un indicador de línea de comandos para maven como skipITs , pero en cambio con la funcionalidad de "onlyITs"?


¡Espero que esto ayude!

Intente ejecutar la prueba solo con FailSafe (complemento para prueba de integración: le permitirá ejecutar solo pruebas de integración con este tipo de nombres, de manera predeterminada: * / IT .java, ** / IT.java, * /*ITCase.java ;, pero puedes cambiarlo fácilmente desde el archivo pom)

mvn failsafe:integration-test

Y cuando quiera usar solo SureFire (complemento para pruebas unitarias)

mvn surefire:test

o una prueba a la vez con:

mvn -Dtest=MyUnitlTest


Descubrí que la forma más sencilla de omitir solo las pruebas de seguridad es configurar Surefire ( pero no a prueba de fallas ) de la siguiente manera:

<plugin> <artifactId>maven-surefire-plugin</artifactId> <version>2.14</version> <configuration> <!-- skips surefire tests without skipping failsafe tests. Property value seems to magically default to false --> <skipTests>${skip.surefire.tests}</skipTests> </configuration> </plugin>

Esto le permite ejecutar mvn verify -Dskip.surefire.tests y solo se saltan las pruebas de seguridad, no a prueba de fallas; también ejecutará todas las otras fases necesarias, incluida la preintegración y la post integración, y también ejecutará el objetivo de verify que se requiere para realmente fallar su compilación segura si fallan sus pruebas de integración.

Tenga en cuenta que esto redefine la propiedad utilizada para especificar que las pruebas deben omitirse, por lo que si proporciona el canónico -DskipTests=true , surefire lo ignorará, pero failsafe lo respetará, lo que puede ser inesperado, especialmente si tiene compilaciones / usuarios existentes que especifiquen esa bandera ya. Una solución simple parece ser la predeterminada skip.surefire.tests al valor de skipTests en su sección <properties> del pom:

<properties> <skip.surefire.tests>${skipTests}</skip.surefire.tests> </properties>

Si es necesario, podría proporcionar un parámetro análogo llamado skip.failsafe.tests para seguridad, sin embargo no lo he encontrado necesario, porque las pruebas unitarias generalmente se ejecutan en una fase anterior, y si quiero ejecutar pruebas unitarias pero no la integración pruebas, correría la fase de test lugar de la fase de verify . ¡Tus experiencias pueden variar!

Estas propiedades skip.(surefire|failsafe).tests probablemente deberían integrarse en el código surefire / failsafe en sí, pero no estoy seguro de cuánto violaría el ethos "son exactamente el mismo complemento a excepción de 1 pequeña diferencia".


Estoy usando el código del blog Antonio Goncalves , que funciona perfecto.

Puede usar las siguientes propiedades:

-DskipUTs=true para omitir pruebas de -DskipUTs=true .

-DskipITs=true para omitir pruebas a prueba de fallas.

-DskipTests=true para omitir todas las pruebas.

Creé una acción en Netbeans que me permite probar una sola prueba de integración usando el objetivo de verificación y las propiedades:

it.test=${packageClassName}

skipUTs=true

El pom.xml es el siguiente:

<properties> <skipTests>false</skipTests> <skipITs>${skipTests}</skipITs> <skipUTs>${skipTests}</skipUTs> </properties> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.19.1</version> <configuration> <skipTests>${skipUTs}</skipTests> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-failsafe-plugin</artifactId> <version>2.19.1</version> <executions> <execution> <id>run-integration-tests</id> <phase>integration-test</phase> <goals> <goal>integration-test</goal> <goal>verify</goal> </goals> </execution> </executions> <configuration> <skipTests>${skipTests}</skipTests> <skipITs>${skipITs}</skipITs> </configuration> </plugin> </plugins> </build>


Intenta ejecutar tus pruebas de integración o unidad en un perfil separado. Luego puede habilitar / deshabilitar el perfil.


Me gusta así que cada fase se ejecuta normalmente:

mvn -Dtest=foo -DfailIfNoTests=false verify


Una solución alternativa sería llamar:

mvn clean test-compile failsafe:integration-test

Es cierto que esto es feo, pero puede resolver su problema.

O (otro truco):

mvn clean integration-test -Dtest=SomePatternThatDoesntMatchAnything -DfailIfNoTests=false

Referencia: