Usando o JUnit 5 com Gradle
1. Visão geral
Neste tutorial, vamos executar testes na nova plataforma JUnit 5 com a ferramenta de compilação Gradle.
Vamos configurar um projeto compatível com a versão antiga e a nova.
Sinta-se à vontade para lerA Guide to JUnit 5 para obter mais informações sobre a nova versão. Ou oIntroduction to Gradle para informações detalhadas sobre a ferramenta de compilação.
2. Configuração Gradle
Primeiro, verificamos se a versão 4.6 ou superior da ferramenta de compilação está instalada, pois é a versão mais antiga que funciona com JUnit 5.
A maneira mais simples é apenas executar o comandogradle -v:
$> gradle -v
------------------------------------------------------------
Gradle 4.10.2
------------------------------------------------------------
E, se necessário, podemos seguir os passos deinstallation para obter a versão correta.
Depois de instalar tudo, precisamos configurar o Gradle usando o arquivobuild.gradle.
Podemos começar fornecendo a plataforma de teste de unidade para a ferramenta de construção:
test {
useJUnitPlatform()
}
Agora que especificamos a plataforma, precisamos fornecer as dependências JUnit. É aqui que observamos uma diferença notável entre o JUnit 5 e as versões anteriores.
Veja, nas versões anteriores, precisávamos apenas de uma dependência. In JUnit 5, though, the API is separated from the runtime, meaning two dependencies.
A API é manifestada comjunit-jupiter-api. O tempo de execução éjunit-jupiter-engine para JUnit 5 ejunit-vintage-engine para JUnit 3 ou 4.
Forneceremos esses dois emtestImplementation areiatimeRuntimeOnly, respectivamente:
dependencies {
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.3.1'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.3.1'
}
3. Criando testes
Vamos escrever nosso primeiro teste. Parece com versões anteriores:
@Test
public void testAdd() {
assertEquals(42, Integer.sum(19, 23));
}
Agora,we can run the test by executing the gradle clean test command.
Para verificar se estamos usando o JUnit 5, podemos olhar as importações. The imports for @Test and assertEquals should have a package starting with org.junit.jupiter.api:
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
Portanto, no último exemplo, criamos um teste com a funcionalidade 'antiga' que funciona há anos. Agora, criaremos outro exemplo que usa algumas das novas funcionalidades do JUnit 5:
@Test
public void testDivide() {
assertThrows(ArithmeticException.class, () -> {
Integer.divideUnsigned(42, 0);
});
}
assertThrows é uma nova afirmação em JUnit5 que substitui o estilo antigo de@Test(expected=ArithmeticException.class).
4. Configurando testes JUnit 5 com Gradle
A seguir, exploraremos uma integração mais profunda entre Gradle e JUnit5.
Digamos que temos dois tipos de testes em nosso pacote: longa e curta. Poderíamos usar a anotação JUnit 5@Tag :
public class CalculatorJUnit5Test {
@Tag("slow")
@Test
public void testAddMaxInteger() {
assertEquals(2147483646, Integer.sum(2147183646, 300000));
}
@Tag("fast")
@Test
public void testDivide() {
assertThrows(ArithmeticException.class, () -> {
Integer.divideUnsigned(42, 0);
});
}
}
Then, we tell the build tool which ones to execute. Em nosso caso, vamos apenas executar os testes de curta duração (rápidos):
test {
useJUnitPlatform {
includeTags 'fast'
excludeTags 'slow'
}
}
5. Ativando Suporte para Versões Antigas
Now, it’s still possible to create JUnit 3 and 4 tests with the new Jupiter engine. Ainda mais, podemos misturá-los com a nova versão no mesmo projeto, digamos, em um cenário de migração.
Para começar, adicionamos algumas dependências à configuração de compilação existente:
testCompileOnly 'junit:junit:4.12'
testRuntimeOnly 'org.junit.vintage:junit-vintage-engine:5.3.1'
Observe como nosso projeto agora temjunit-jupiter-engine ejunit-vintage-engine.
Agora criamos uma nova classe e copiamos e colamos o métodotestDivide que criamos anteriormente. Em seguida, adicionamos as importações para@TesteassertEquals. No entanto, desta vez, certifique-se de usar os pacotes da versão 4 antiga, começando comorg.junit:
import static org.junit.Assert.assertEquals;
import org.junit.Test;
public class CalculatorJUnit4Test {
@Test
public void testAdd() {
assertEquals(42, Integer.sum(19, 23));
}
}
6. Conclusão
Neste tutorial, integramos o Gradle ao JUnit 5. Ainda mais, também adicionamos suporte para as versões 3 e 4.
Vimos que a ferramenta de construção oferece excelente suporte para as versões antigas e novas. Portanto, podemos usar os novos recursos em um projeto existente sem a necessidade de alterar todos os nossos testes existentes.
O exemplo de código completo está disponível emGitHub project. Sinta-se livre para usá-lo como ponto de partida para seu próprio projeto.