Executando Especificações de Integração do Kotest com Maven
Depois de concluirmos esta aula, nós:
- Saberemos como configurar os diretórios de código-fonte (
src/integration-test/kotlin) e recursos (src/integration-test/resources) para especificações de integração no Maven. - Compreenderemos como pular testes unitários ou testes de integração utilizando perfis do Maven (
devvsintegration-test). - Saberemos como executar especificações de integração do Kotest 6 usando o Maven Failsafe Plugin.
1. Os Requisitos do Nosso Build Maven
Os requisitos do nosso build Maven são:
- Nossos testes de integração devem ter um diretório de código-fonte separado:
src/integration-test/kotlin. - Nossos testes de integração devem ter um diretório de recursos separado:
src/integration-test/resources. - Apenas os testes unitários devem ser executados por padrão.
- Devemos ser capazes de executar apenas os testes de integração sob demanda.
Vamos começar criando os perfis do Maven responsáveis por alternar entre a execução dos testes unitários e dos testes de integração.
2. Criando os Perfis do Maven Necessários
Precisamos criar dois perfis no nosso pom.xml:
- O perfil
devé o perfil padrão do nosso build e garante que apenas os testes unitários sejam executados quando ele estiver ativo. - O perfil
integration-testgarante que apenas os testes de integração sejam executados quando for ativado.
Podemos criar esses perfis em dois passos:
Primeiro, adicionamos duas propriedades na seção <properties> do pom.xml:
skip.unit.tests:truequando o Maven deve pular os testes unitários (falsepor padrão).skip.integration.tests:truequando o Maven deve pular os testes de integração (truepor padrão).
|
|
Segundo, declaramos os perfis dev (ativo por padrão) e integration-test na seção <profiles>:
|
|
A seguir, vamos configurar os diretórios de código-fonte dos nossos testes unitários e de integração.
3. Configurando os Diretórios de Código-Fonte (kotlin-maven-plugin)
Como escrevemos tanto nossos testes unitários quanto nossas especificações de integração em Kotlin, o compilador kotlin-maven-plugin precisa conhecer ambos os diretórios (src/test/kotlin e src/integration-test/kotlin).
Configuramos a seção <sourceDirs> da execução test-compile do kotlin-maven-plugin (ou adicionamos ambos os diretórios via build-helper-maven-plugin) da seguinte maneira:
|
|
4. Configurando o Diretório de Recursos dos Testes de Integração
Para adicionar o diretório de recursos src/integration-test/resources ao classpath de teste do Maven, utilizamos o Build Helper Maven Plugin (build-helper-maven-plugin):
Primeiro, declaramos o plugin na seção <plugins> do pom.xml:
|
|
Segundo, configuramos uma execução que invoca o goal add-test-resource na fase generate-test-resources adicionando o diretório src/integration-test/resources:
|
|
5. Configurando o Maven Surefire para Pular Testes Unitários Quando Solicitado
O Maven Surefire Plugin não executa os testes unitários quando sua propriedade <skipTests> é true. Vinculamos <skipTests> à nossa propriedade ${skip.unit.tests}:
|
|
Antes de configurarmos o Maven Failsafe Plugin, vamos escrever uma especificação simples de integração.
6. Escrevendo uma Especificação Simples de Integração
A classe GetMessageSpec (localizada em src/integration-test/kotlin) contém uma especificação que verifica se o método getMessage() de MessageService retorna "Hello World!". Marcamos essa classe com a tag IntegrationTest:
|
|
Onde IntegrationTest é nosso objeto marcador de tag:
|
|
7. Executando Testes de Integração com o Maven Failsafe Plugin
Utilizamos o Maven Failsafe Plugin (maven-failsafe-plugin) para executar nossos testes de integração construindo a configuração em quatro passos:
- Garantimos que ambos os goals
integration-test(que executa os testes) everify(que falha o build caso algum teste de integração tenha falhado) sejam invocados. - Configuramos
<includes>para incluir todas as classes terminadas com**/*Spec.java. - Passamos
<kotest.tags>IntegrationTest</kotest.tags>em<systemPropertyVariables>para que apenas as especificações de integração sejam executadas. - Vinculamos
<skipTests>à propriedade${skip.integration.tests}para que os testes de integração só rodem quando o perfilintegration-testestiver ativo:
|
|
8. Executando Nossos Testes Unitários e de Integração
Para executar apenas os testes unitários, rodamos:
|
|
Saída no terminal:
|
|
Para executar apenas os testes de integração, rodamos:
|
|
Saída no terminal:
|
|
Resumo
Nesta aula, aprendemos quatro pontos essenciais:
- Configuramos o
kotlin-maven-pluginpara compilar tantosrc/test/kotlinquantosrc/integration-test/kotlin. - Adicionamos
src/integration-test/resourcesusando obuild-helper-maven-plugin. - Executamos nossas especificações de integração do Kotest usando o
maven-failsafe-pluginfiltrado porkotest.tags=IntegrationTest. - Controlamos a ativação das suítes unitária e de integração por meio dos perfis Maven
deveintegration-test.