Listagem 5. Registrando as invocações dos métodos do ciclo de vida Junit 5 (LifeCycledemotest.java)
package com.javaworld.geekcap.lifecycle;
import org.junit.jupiter.api.*;
public class LifecycleDemoTest {
@BeforeAll
static void beforeAll() {
System.out.println("Connect to the database");
}
@BeforeEach
void beforeEach() {
System.out.println("Load the schema");
}
@AfterEach
void afterEach() {
System.out.println("Drop the schema");
}
@AfterAll
static void afterAll() {
System.out.println("Disconnect from the database");
}
@Test
void testOne() {
System.out.println("Test One");
}
@Test
void testTwo() {
System.out.println("Test Two");
}
}
A saída da execução deste teste imprime o seguinte:
Connect to the database
Load the schema
Test One
Drop the schema
Load the schema
Test Two
Drop the schema
Disconnect from the database
Como você pode ver nesta saída, o beforeAll
O método é chamado primeiro e pode fazer algo como conectar -se a um banco de dados ou criar uma grande estrutura de dados na memória. Em seguida, o beforeEach
O método prepara os dados para cada teste; Por exemplo, preenchendo um banco de dados de teste com um conjunto esperado de dados. O primeiro teste depois é executado, seguido pelo afterEach
método. Este processo (beforeEach
-> teste—>afterEach
) continua até que todos os testes tenham concluído. Finalmente, o afterAll
O método limpa o ambiente de teste, possivelmente desconectando de um banco de dados.
Antes de encerrar essa introdução inicial aos testes com o JUNIT 5, mostrarei como usar tags para executar seletivamente diferentes tipos de casos de teste. As tags são usadas para identificar e filtrar testes específicos que você deseja executar em vários cenários. Por exemplo, você pode marcar uma classe ou método de teste como um teste de integração e outro como código de desenvolvimento. Os nomes e usos das tags dependem de você.
Vamos criar três novas classes de teste e marcar duas delas como desenvolvimento e uma como integração, presumivelmente para diferenciar entre os testes que você deseja executar ao criar para diferentes ambientes. As listagens 6, 7 e 8 mostram esses três testes simples.
Listagem 6. Junit 5 Tags, Teste 1 (Testone.java)
package com.javaworld.geekcap.tags;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
@Tag("Development")
class TestOne {
@Test
void testOne() {
System.out.println("Test 1");
}
}
Listagem 7. Junit 5 Tags, Teste 2 (Testtwo.java)
package com.javaworld.geekcap.tags;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
@Tag("Development")
class TestTwo {
@Test
void testTwo() {
System.out.println("Test 2");
}
}
Listagem 8. Junit 5 Tags, Teste 3 (TestThree.java)
package com.javaworld.geekcap.tags;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
@Tag("Integration")
class TestThree {
@Test
void testThree() {
System.out.println("Test 3");
}
}
As tags são implementadas por meio de anotações e você pode anotar uma classe de teste inteira ou métodos individuais em uma classe de teste; Além disso, uma classe ou um método pode ter várias tags. Neste exemplo, Testone e Testtwo são anotados com o “Development”
tag e testhree são anotados com o “Integration”
marcação. Podemos filtrar as execuções de teste de maneiras diferentes com base em tags. O mais simples deles é especificar um teste na sua linha de comando Maven; por exemplo, o seguinte executa apenas testes marcados como “Development”
:
mvn clean test -Dgroups="Development"
O groups
A propriedade permite especificar uma lista separada por vírgula de nomes de tags para os testes que você deseja executar o Junit 5. A execução disso produz a seguinte saída:
(INFO) -------------------------------------------------------
(INFO) T E S T S
(INFO) -------------------------------------------------------
(INFO) Running com.javaworld.geekcap.tags.TestOne
Test 1
(INFO) Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.029 s - in com.javaworld.geekcap.tags.TestOne
(INFO) Running com.javaworld.geekcap.tags.TestTwo
Test 2
(INFO) Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.001 s - in com.javaworld.geekcap.tags.TestTwo
Da mesma forma, poderíamos executar apenas os testes de integração da seguinte forma:
mvn clean test -Dgroups="Integration"
Ou poderíamos executar testes de desenvolvimento e integração:
mvn clean test -Dgroups="Development, Integration"
Além do groups
Propriedade, Junit 5 permite que você use um excludedGroups
Propriedade para executar todos os testes que não possuem a tag especificada. Por exemplo, em um ambiente de desenvolvimento, não queremos executar os testes de integração, para que possamos executar o seguinte:
mvn clean test -DexcludedGroups="Integration"
Isso é útil porque uma grande aplicação pode ter literalmente milhares de testes. Se você quisesse criar essa diferenciação ambiental e adicionar novos testes de produção, você não gostaria de voltar e adicionar um “Development”
Tag para os outros 10.000 testes.
Finalmente, você pode adicionar esses mesmos groups
e excludedGroups
campos para o surefire
Plugue no seu arquivo maven pom. Você também pode controlar esses campos usando perfis Maven. Encorajo você a revisar o Guia do Usuário do Junit 5 para saber mais sobre tags.
Conclusão
Este artigo introduziu alguns dos destaques do trabalho com o Junit 5. Mostrei como configurar um projeto MAVEN para usar o Junit 5 e como escrever testes usando o @Test
e @ParameterizedTest
anotações. Em seguida, introduzi as anotações do ciclo de vida do JUNIT 5, seguidas de uma olhada no uso e benefícios das tags de filtro.