Um guia para @RepeatedTest em 5 de junho

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.