Um guia para @RepeatedTest em 5 de junho
1. Visão geral
Neste artigo rápido, vamos dar uma olhada na anotação@RepeatedTest introduzida no JUnit 5. Ele nos fornece uma maneira poderosa de escrever qualquer teste que desejamos repetir várias vezes.
Se você quiser saber mais sobre o JUnit 5, verifique nossos outros artigosexplaining the basicseguide to JUnit 5.
2. Dependências e configuração do Maven
A primeira coisa a observar é que o JUnit 5 precisa do Java 8 para ser executado. Dito isso, vamos dar uma olhada na dependência do Maven:
org.junit.jupiter
junit-jupiter-engine
5.1.0
test
Essa é a principal dependência do JUnit 5 que precisamos adicionar para escrever nossos testes. Verifique a versão mais recente do artefatohere.
3. Um exemplo simples de@RepeatedTest
Criar um teste repetido é simples - basta adicionar a anotação@RepeatedTest na parte superior do método de teste:
@RepeatedTest(3)
void repeatedTest(TestInfo testInfo) {
System.out.println("Executing repeated test");
assertEquals(2, Math.addExact(1, 1), "1 + 1 should equal 2");
}
Observe que, em vez da anotação@Test padrão, estamos usando@RepeatedTest para nosso teste de unidade. The above test will be executed three times como se o mesmo teste fosse escrito três vezes.
Os relatórios de teste (os arquivos de relatório ou os resultados na guia JUnit do seu IDE) exibirão todas as execuções:
repetition 1 of 3(repeatedTest(TestInfo))
repetition 2 of 3(repeatedTest(TestInfo))
repetition 3 of 3(repeatedTest(TestInfo))
4. Suporte de ciclo de vida para@RepeatedTest
Each execution of the @RepeatedTest will behave like a regular @Test tendo suporte completo ao ciclo de vida de teste JUnit. Ou seja, durante cada execução, os métodos@BeforeEache@AfterEach serão chamados. Para demonstrar isso, basta adicionar os métodos apropriados na classe de teste:
@BeforeEach
void beforeEachTest() {
System.out.println("Before Each Test");
}
@AfterEach
void afterEachTest() {
System.out.println("After Each Test");
System.out.println("=====================");
}
Se executarmos o teste anterior, os resultados serão exibidos no console:
Before Each Test
Executing repeated test
After Each Test
=====================
Before Each Test
Executing repeated test
After Each Test
=====================
Before Each Test
Executing repeated test
After Each Test
=====================
Como podemos ver, o@BeforeEach and @AfterEach methods are called around each execution.
5. Configurando o Nome do Teste
No primeiro exemplo, observamos que a saída do relatório de teste não contém nenhum identificador. Isso pode ser configurado posteriormente usando o atributoname:
@RepeatedTest(value = 3, name = RepeatedTest.LONG_DISPLAY_NAME)
void repeatedTestWithLongName() {
System.out.println("Executing repeated test with long name");
assertEquals(2, Math.addExact(1, 1), "1 + 1 should equal 2");
}
A saída agora conterá o nome do método junto com o índice de repetição:
repeatedTestWithLongName() :: repetition 1 of 3(repeatedTestWithLongName())
repeatedTestWithLongName() :: repetition 2 of 3(repeatedTestWithLongName())
repeatedTestWithLongName() :: repetition 3 of 3(repeatedTestWithLongName())
Outra opção é usarRepeatedTest.SHORT_DISPLAY_NAME que produzirá o nome abreviado do teste:
repetition 1 of 3(repeatedTestWithShortName())
repetition 2 of 3(repeatedTestWithShortName())
repetition 3 of 3(repeatedTestWithShortName())
Se, no entanto, precisarmos usar nosso nome personalizado, é muito possível:
@RepeatedTest(value = 3, name = "Custom name {currentRepetition}/{totalRepetitions}")
void repeatedTestWithCustomDisplayName(TestInfo testInfo) {
assertEquals(2, Math.addExact(1, 1), "1 + 1 should equal 2");
}
Os{currentRepetition}e{totalRepetitions} são os marcadores para a repetição atual e o número total de repetições. Esses valores são fornecidos automaticamente pelo JUnit no tempo de execução e nenhuma configuração adicional é necessária. A saída é praticamente o que esperávamos:
Custom name 1/3(repeatedTestWithCustomDisplayName())
Custom name 2/3(repeatedTestWithCustomDisplayName())
Custom name 3/3(repeatedTestWithCustomDisplayName())
6. Acessando oRepetitionInfo
Além do atributoname, JUnit fornece acesso aos metadados de repetição em nosso código de teste também. Isso é obtido adicionando um parâmetroRepetitionInfo ao nosso método de teste:
@RepeatedTest(3)
void repeatedTestWithRepetitionInfo(RepetitionInfo repetitionInfo) {
System.out.println("Repetition #" + repetitionInfo.getCurrentRepetition());
assertEquals(3, repetitionInfo.getTotalRepetitions());
}
A saída conterá o índice de repetição atual para cada uma das execuções:
Repetition #1
Repetition #2
Repetition #3
ORepetitionInfo é fornecido porRepetitionInfoParameterResolver e está disponível apenas no contexto de@RepeatedTest.
7. Conclusão
Neste tutorial rápido, exploramos a anotação@RepeatedTest fornecida pelo JUnit e aprendemos diferentes maneiras de configurá-la.
Não se esqueça de verificar ofull source code deste artigo no GitHub.