¿Dónde se deben almacenar las pruebas de integración cuando se utiliza el plugin maven-failafe?

¿Debo colocar mis pruebas de integración bajo src/test con el rest de mis pruebas unitarias y simplemente distinguirlas por un patrón como *Integr*Test , *ITTest , o pueden estar en src/it (como es el caso cuando desarrollando complementos de Maven y utilizando el maven-invoker-plugin Maven)?

Pregunto esto porque, para mí, no parece lo suficientemente limpio si las pruebas de integración y de unidad están en el mismo lugar (incluso si debieran controlarse a través de un perfil de Maven).

First maven-fail-plugin se ejecuta de forma predeterminada en otra fase del ciclo de vida (integración-prueba), como hace maven-surefire-plugin (prueba). Además, puede configurar maven-failafe-plugin para ejecutar el objective de verify en la fase de prueba post-integration-test si desea verificar si las pruebas de integración han fallado. Esto se puede configurar libremente.

Hay una pregunta que viene a mi mente. ¿Tienes 10 módulos y ahora te gustaría tener pruebas de integración? ¿A qué módulo pertenecen? Así que lo mejor es tener un módulo separado porque no pertenecen a ninguno de los 10 módulos.

Aparte de eso, maven-surefire-plugin ya está configurado en el ciclo de vida predeterminado. Sí, un objective complementario sería una idea, pero confundiría al usuario con el uso de los mismos complementos en diferentes relaciones. Entonces la separación de preocupaciones es importante aquí. Aparte de las configuraciones predeterminadas completas … Esos complementos comparten una base de código más grande pero hay diferencias …

Además, lo que ya mencionó Tunaki es pre-integration-test , para cosas de configuración como servidores, etc. integration-test y cosas como cerrar servicios / servidores en post-integration-test fase post-integration-test . Esto nunca sucederá en pruebas unitarias.

El uso de un módulo separado hace que, por lo general, sea más simple configurar las TI, lo que significa que tiene diferentes dependencias (classpath) que para las pruebas unitarias. Por ejemplo, cosas como Arquillian.org que nunca se usa en pruebas unitarias. Esto no se puede manejar en un solo módulo … también es bueno separar las preocupaciones aquí.

Además, las pruebas de integración no se pueden paralizar por defecto, mientras que las pruebas unitarias pueden ser por definición, de lo contrario no son pruebas unitarias.

¿Y qué hay del diseño de la carpeta? En el módulo de prueba de integración puede simplemente usar la carpeta src/test/java que significa que no necesita configuración adicional, etc. (por ejemplo, a través de build-helper-maven-plugin, etc.) que lo hace más fácil y sigue más la convención sobre el paradigma de configuración.

Y no olvide que puede controlar mejor lo que se está ejecutando en su comstackción (CI).

Y otra sugerencia importante. Por lo general, las pruebas de integración suelen estar relacionadas con la infraestructura, por lo que a veces puede ser útil ignorar las fallas que pueden manejarse simplemente usando el objective de check de maven-failafe-plugin …

Un ejemplo para un módulo de TI se puede encontrar aquí .

Tiene razón en que src/it está destinado a utilizarse para pruebas de integración de complementos. Esto se menciona en el diseño de directorio estándar .

El maven-failsafe-plugin , de forma predeterminada, buscará las pruebas de integración dentro de ${project.build.testSourceDirectory} , que es lo mismo que maven-surefire-plugin para pruebas unitarias. Por defecto, esto corresponde a src/test/java . Las pruebas de integración se hacen distintas siguiendo una convención de nomenclatura :

  **/IT*.java **/*IT.java **/*ITCase.java  

que es diferente de la convención de nomenclatura para pruebas unitarias:

  **/Test*.java **/*Test.java **/*TestCase.java  

Por lo tanto, si bien residirían en la misma carpeta de origen ( src/test/java ), la diferencia en los nombres los distingue claramente. Además, esta es la configuración predeterminada, por lo que no sería necesaria ninguna configuración adicional.

Dicho esto, puedes tener otras opciones:

  • Coloque las pruebas de integración dentro de una carpeta de origen diferente. Esto requerirá alguna configuración para que funcione: necesitará usar el objective build-helper-maven-plugin:add-test-source para agregar la carpeta personalizada como una carpeta de origen de prueba.
  • Use un módulo diferente (si tiene un proyecto de varios módulos de Maven) que solo contendría las pruebas de integración.
    Intereting Posts