Pruebas unitarias y de integración con categorías Maven y JUnit

Este ejemplo muestra cómo dividir las pruebas unitarias y de integración mediante las categorías Maven y JUnit.

Es especialmente útil para conjuntos de pruebas existentes y se puede implementar en minutos.

Mi publicación anterior mostró cómo usar un perfil de maven para dividir pruebas de unidad e integración.

//johndobie.blogspot.co.uk/2011/06/seperating-maven-unit-integration-tests.html

Esta ha sido una publicación muy bien leída y me gusta cómo usa directorios separados. Sin embargo, este ejemplo muestra una técnica mucho más simple que se puede aplicar fácilmente a conjuntos de pruebas heredados.

Ofrece la mayoría de los beneficios del original y se adapta más cómodamente al mundo Maven.

El código del ejemplo está aquí.

svn co //designbycontract.googlecode.com/svn/trunk/examples/maven/categor... mvn clean install 

A partir de JUnit 4.8, puede definir sus propias categorías para las pruebas. Esto le permite etiquetar y agrupar pruebas.

Este ejemplo muestra lo fácil que es separar la prueba de unidad y la de integración utilizando la anotación @Catgegory.

//kentbeck.github.com/junit/javadoc/latest/org/junit/experimental/categories/Categories.html

El primer paso para agrupar una prueba mediante categorías es crear una interfaz de marcador.

Esta interfaz se utilizará para marcar todas las pruebas que desea ejecutar como pruebas de integración.

public interface IntegrationTest {} 

Agregue la anotación de categoría en la parte superior de su clase de prueba. Toma el nombre de su nueva interfaz.

import org.junit.experimental.categories.Category; @Category(IntegrationTest.class) public class ExampleIntegrationTest{ @Test public void longRunningServiceTest() throws Exception { } } 

Las categorías se pueden utilizar para marcar clases o métodos. Realmente en mi opinión solo debes marcar una clase.

Si tiene pruebas unitarias y de integración en una sola clase, divídala.

La belleza de esta solución es que nada cambia realmente para el lado de la prueba unitaria de las cosas.

Simplemente agregamos alguna configuración al complemento seguro de maven para que ignore cualquier prueba de integración.

 org.apache.maven.plugins maven-surefire-plugin 2.11   org.apache.maven.surefire surefire-junit47 2.12     **/*.class  com.test.annotation.type.IntegrationTest   

Hay 2 partes muy importantes. La primera es configurar surefire para excluir todas las pruebas de integración.

com.test.annotation.type.IntegrationTest 

Surefire ejecutará todas sus pruebas, excepto las marcadas como prueba de integración.

La otra parte importante es asegurarse de que el complemento seguro utilice el proveedor JUnit correcto. Se necesita el proveedor JUnit47 para detectar correctamente las categorías.

  org.apache.maven.surefire surefire-junit47 2.12   

Para asegurarnos de que esto funcione correctamente, podemos ejecutar las pruebas unitarias

mvn clean test 

Puede ver en el resultado a continuación que se ejecuta la prueba unitaria, pero no la prueba de integración.

------------------------------------------------------- T E S T S ------------------------------------------------------- Running com.test.EmptyUnitTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0 sec Results : Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ 

Nuevamente, la configuración para esto es muy simple.

Usamos el complemento estándar a prueba de fallas y lo configuramos para que solo ejecute las pruebas de integración.

 maven-failsafe-plugin 2.12   org.apache.maven.surefire surefire-junit47 2.12    com.test.annotation.type.IntegrationTest     integration-test    **/*.class      

La configuración utiliza un objetivo de ejecución estándar para ejecutar el complemento a prueba de fallos durante la fase de prueba de integración de la compilación.

La siguiente configuración garantiza que solo se ejecuten las pruebas de integración.

com.test.annotation.type.IntegrationTest 

Y nuevamente, el proveedor JUnit debe estar configurado correctamente.

  org.apache.maven.surefire surefire-junit47 2.12   

¡Eso es!

Ahora podemos ejecutar toda la compilación.

mvn clean install 

Esta vez, además de la prueba unitaria en ejecución, las pruebas de integración se ejecutan durante la fase de prueba de integración.

------------------------------------------------------- T E S T S ------------------------------------------------------- Running com.test.AnotherEmptyIntegrationTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.016 sec Running com.test.EmptyIntegrationTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0 sec Results : Tests run: 2, Failures: 0, Errors: 0, Skipped: 0 

Para ver lo fácil que es agregar cobertura de código a este método, consulte este enlace.

//johndobie.blogspot.co.uk/2012/05/easy-unit-and-integration-code-coverage.html

Para obtener un ejemplo más completo que utiliza inicia Tomcat y una base de datos.

svn co //designbycontract.googlecode.com/svn/trunk/examples/maven/code-co... mvn clean install -Ptomcat-embedded 

Está basado en este ejemplo

//johndobie.blogspot.com/2011/10/maven-integration-testing-and-spring.html

Esta historia, "Pruebas unitarias y de integración con categorías Maven y JUnit" fue publicada originalmente por JavaWorld.