Isolando Especificações de Integração no Gradle 9
Depois de concluirmos esta aula, nós:
- Saberemos como adicionar suítes de teste customizadas (
integrationTest) ao nosso build Gradle 9.8.2 usando o plugin nativojvm-test-suite. - Saberemos como compilar e executar especificações de integração que utilizam o Kotest Framework 6 com diretórios de relatórios HTML separados.
1. Os Requisitos do Nosso Build Gradle
Os requisitos do nosso build Gradle são:
- Nossos testes de integração devem ter um diretório de código-fonte separado (
src/integrationTest/kotlin— ousrc/integration-test/kotlincaso customizado). - Nossos testes de integração devem ter um diretório de recursos separado (
src/integrationTest/resources). - Devemos ser capazes de executar apenas os testes unitários, apenas os testes de integração ou todos os testes.
- Se um teste de integração falhar, nosso build também deve falhar.
- Os testes unitários e os testes de integração devem gerar relatórios HTML em diretórios separados (
build/reports/tests/testebuild/reports/tests/integrationTest).
Vamos começar adicionando a suíte integrationTest ao nosso build Gradle!
2. Adicionando Suítes de Teste ao Build Gradle (jvm-test-suite)
Nas versões antigas do Gradle (Gradle 4), era necessário adicionar um plugin de terceiros (org.unbroken-dome.test-sets) para criar source sets de teste extras.
No Gradle 9.8.2, o plugin oficial jvm-test-suite já vem embutido na distribuição do Gradle (e é aplicado automaticamente pelo plugin java / kotlin("jvm")). Ele cria automaticamente o source set, as configurações de dependência (integrationTestImplementation), a task integrationTest e um diretório de relatório HTML exclusivo!
Vamos declarar os plugins no nosso build.gradle.kts:
|
|
3. Configurando os Diretórios e a Task da Suíte integrationTest
Agora configuramos o bloco testing.suites no nosso build.gradle.kts seguindo três passos:
Primeiro, registramos uma nova suíte chamada integrationTest do tipo JvmTestSuite. Por padrão, o jvm-test-suite configura:
src/integrationTest/kotlincomo diretório de código-fonte.src/integrationTest/resourcescomo diretório de recursos.
[!TIP] Se você estiver migrando um projeto legado que utiliza o nome de diretório com hífen (
src/integration-test/kotlinesrc/integration-test/resources), você pode customizar os diretórios no blocosourcesda suíte:
1 2 3 4sources { kotlin.setSrcDirs(listOf("src/integration-test/kotlin")) resources.setSrcDirs(listOf("src/integration-test/resources")) }
Segundo, garantimos que a suíte integrationTest tenha acesso às classes principais do projeto (implementation(project())) e às dependências do Kotest 6, além de configurar shouldRunAfter(test) para que os testes unitários sempre rodem antes dos testes de integração.
Terceiro, configuramos a task check para depender da suíte integrationTest (tasks.named("check") { dependsOn(testing.suites.named("integrationTest")) }).
Veja como fica o nosso build.gradle.kts completo:
|
|
[!NOTE] Diferentemente do antigo plugin
test-sets(onde precisávamos configurar manualmentereports.html.destinationpara evitar que o relatório deintegrationTestsobrescrevesse o relatório detest), ojvm-test-suitedo Gradle 9 já cria diretórios de relatórios HTML separados automaticamente embuild/reports/tests/testebuild/reports/tests/integrationTest!
4. Escrevendo uma Especificação Simples de Integração
Vamos criar a classe GetMessageSpec dentro de src/integrationTest/kotlin/com/testwithspring/master:
|
|
5. Executando Nossos Testes Unitários e de Integração
Podemos executar nossas suítes usando qualquer uma das três opções abaixo:
Opção 1: Executar apenas os testes unitários
- Rodando
./gradlew clean test - Ou rodando
./gradlew clean build -x integrationTest
|
|
Opção 2: Executar apenas os testes de integração
- Rodando
./gradlew clean integrationTest - Ou rodando
./gradlew clean build -x test
|
|
Opção 3: Executar todos os testes (unitários e de integração)
- Rodando
./gradlew clean test integrationTest - Ou rodando
./gradlew clean build(ou./gradlew check)
|
|
Resumo
Nesta aula, aprendemos três pontos fundamentais:
- Adicionamos suítes de teste customizadas no Gradle 9 usando o plugin nativo
jvm-test-suitesem depender de plugins externos legados. - Cada suíte registrada em
testing.suitesrecebe seus próprios diretórios (src/integrationTest/kotlinesrc/integrationTest/resources), sua própria task (integrationTest) e seu próprio diretório de relatórios HTML. - Vinculamos
integrationTestao ciclo de vida da taskchecke configuramosshouldRunAfter(test)para garantir feedback rápido: os testes unitários sempre executam primeiro!