Puede dividirlos muy fácilmente usando las categorías JUnit y Maven.
Esto se muestra muy, muy brevemente a continuación dividiendo la unidad y las pruebas de integración.
Definir una interfaz de marcador
El primer paso para agrupar una prueba usando 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 {}
Marque sus clases de prueba
Agregue la anotación de categoría a 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 {
}
}
Configurar las pruebas de la unidad Maven
La belleza de esta solución es que nada cambia realmente para el lado de las pruebas unitarias.
Simplemente agregamos un poco de configuración al plugin maven surefire para que ignore cualquier prueba de integración.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.11</version>
<dependencies>
<dependency>
<groupId>org.apache.maven.surefire</groupId>
<artifactId>surefire-junit47</artifactId>
<version>2.12</version>
</dependency>
</dependencies>
<configuration>
<includes>
<include>**/*.class</include>
</includes>
<excludedGroups>com.test.annotation.type.IntegrationTest</excludedGroups>
</configuration>
</plugin>
Cuando realice una prueba de limpieza de mvn, solo se ejecutarán las pruebas unitarias sin marcar.
Configurar las pruebas de integración de Maven
Nuevamente, la configuración para esto es muy simple.
Para ejecutar solo las pruebas de integración, use esto:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.11</version>
<dependencies>
<dependency>
<groupId>org.apache.maven.surefire</groupId>
<artifactId>surefire-junit47</artifactId>
<version>2.12</version>
</dependency>
</dependencies>
<configuration>
<groups>com.test.annotation.type.IntegrationTest</groups>
</configuration>
</plugin>
Si envuelve esto en un perfil con id IT
, solo puede ejecutar las pruebas rápidas con mvn clean install
. Para ejecutar solo las pruebas de integración / lentas, use mvn clean install -P IT
.
Pero lo más frecuente es que desee ejecutar las pruebas rápidas de forma predeterminada y todas las pruebas con -P IT
. Si ese es el caso, entonces tienes que usar un truco:
<profiles>
<profile>
<id>IT</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<excludedGroups>java.io.Serializable</excludedGroups> <!-- An empty element doesn't overwrite, so I'm using an interface here which no one will ever use -->
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
Como puede ver, estoy excluyendo las pruebas que están anotadas java.io.Serializable
. Esto es necesario porque el perfil heredará la configuración predeterminada del complemento Surefire, por lo que incluso si dice <excludedGroups/>
o <excludedGroups></excludedGroups>
, com.test.annotation.type.IntegrationTest
se utilizará el valor .
Tampoco puedes usarlo none
ya que tiene que ser una interfaz en el classpath (Maven lo verificará).
Notas:
- La dependencia a
surefire-junit47
solo es necesaria cuando Maven no cambia automáticamente al corredor JUnit 4. El uso del elemento groups
o excludedGroups
debería activar el interruptor. Vea aquí .
- La mayor parte del código anterior se tomó de la documentación del complemento Maven Failsafe. Consulte la sección "Uso de categorías JUnit" en esta página .
- Durante mis pruebas, descubrí que esto incluso funciona cuando usa
@RunWith()
anotaciones para ejecutar suites o pruebas basadas en Spring.