Você pode dividi-los facilmente usando as categorias JUnit e Maven.
Isso é mostrado muito, muito brevemente abaixo, dividindo os testes de unidade e integração.
Definir uma interface de marcador
A primeira etapa no agrupamento de um teste usando categorias é criar uma interface de marcador.
Essa interface será usada para marcar todos os testes que você deseja executar como testes de integração.
public interface IntegrationTest {}
Marque suas aulas de teste
Adicione a anotação da categoria ao topo da sua classe de teste. Leva o nome da sua nova interface.
import org.junit.experimental.categories.Category;
@Category(IntegrationTest.class)
public class ExampleIntegrationTest{
@Test
public void longRunningServiceTest() throws Exception {
}
}
Configurar testes de unidade Maven
A beleza desta solução é que nada realmente muda para o lado do teste de unidade.
Simplesmente adicionamos alguma configuração ao plug-in maven surefire para que ele ignore todos os testes de integração.
<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>
Quando você faz um teste de limpeza mvn, apenas os testes de unidade não marcados serão executados.
Configurar testes de integração do Maven
Novamente, a configuração para isso é muito simples.
Para executar apenas os testes de integração, use o seguinte:
<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>
Se você agrupar isso em um perfil com id IT
, poderá executar apenas os testes rápidos usando mvn clean install
. Para executar apenas os testes de integração / lentos, use mvn clean install -P IT
.
Mas na maioria das vezes, você desejará executar os testes rápidos por padrão e todos os testes com -P IT
. Se for esse o caso, você precisará usar um truque:
<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 você pode ver, estou excluindo os testes anotados java.io.Serializable
. Isso é necessário porque o perfil herdará a configuração padrão do plug-in Surefire; portanto, mesmo se você disser <excludedGroups/>
ou <excludedGroups></excludedGroups>
, o valor com.test.annotation.type.IntegrationTest
será usado.
Você também não pode usá- none
lo, pois deve ser uma interface no caminho de classe (o Maven verificará isso).
Notas:
- A dependência para
surefire-junit47
é necessária apenas quando o Maven não muda automaticamente para o corredor JUnit 4. O uso do elemento groups
ou excludedGroups
deve acionar a chave. Veja aqui .
- A maior parte do código acima foi retirada da documentação do plug-in Maven Failsafe. Consulte a seção "Usando categorias JUnit" nesta página .
- Durante meus testes, descobri que isso funciona mesmo quando você usa
@RunWith()
anotações para executar suítes ou testes baseados em Spring.