Туториал по JUnit 5 - Аннотация @RepeatedTest

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Это продолжение туториала по JUnit 5. Введение опубликовано здесь.

Аннотация @RepeatedTest используется для написания повторяющихся тестовых шаблонов, которые могут выполняться несколько раз в JUnit. Частоту повторения можно настроить как параметр аннотации @RepeatedTest.

Оглавление

  1. Аннотация @RepeatedTest

    • Синтаксис

    • Методы жизненного цикла

  2. Пользовательские отображаемые имена

  3. Интерфейс RepetitionInfo

1. Аннотация @RepeatedTest

Аннотация @RepeatedTest используется для обозначения метода тестирования, который должен повторяться указанное количество раз с настраиваемым отображаемым именем.

Чтобы повторить тест с различными аргументами, рассмотрите возможность использования аннотации @ParameterizedTest.

1.1. Синтаксис

Чтобы создать повторяемый тест, аннотируйте метод теста с помощью @RepeatedTest.

В данном примере тестовый метод использует аннотацию @RepeatedTest (5). Это означает, что тест будет выполнен пять раз.

@DisplayName("Add operation test")
@RepeatedTest(5)
void addNumber(TestInfo testInfo) {
    Calculator calculator = new Calculator();
    Assertions.assertEquals(2, calculator.add(1, 1), "1 + 1 should equal 2");
}

1.2. Методы жизненного цикла

Обратите внимание, что каждый вызов повторного теста ведет себя как выполнение обычного теста с полной поддержкой тех же обратных вызовов и расширений жизненного цикла.

Это означает, что аннотированные методы жизненного цикла @BeforeEach и @AfterEach будут вызываться при каждом вызове теста.

package com.howtodoinjava.junit5.examples;

import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.RepeatedTest;
import org.junit.jupiter.api.RepetitionInfo;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInfo;
import org.junit.platform.runner.JUnitPlatform;
import org.junit.runner.RunWith;

@RunWith(JUnitPlatform.class)
public class RepeatedTestExample {

	@BeforeAll
	public static void init(){
		System.out.println("Before All init() method called");
	}

	@BeforeEach
	public void initEach(){
		System.out.println("Before Each initEach() method called");
	}

	@DisplayName("Add operation test")
	@RepeatedTest(5)
	void addNumber(TestInfo testInfo, RepetitionInfo repetitionInfo)
	{
		System.out.println("Running addNumber test -> " + repetitionInfo.getCurrentRepetition());
		Assertions.assertEquals(2, Calculator.add(1, 1), "1 + 1 should equal 2");
	}

	@AfterEach
	public void cleanUpEach(){
		System.out.println("After Each cleanUpEach() method called");
	}

	@AfterAll
	public static void cleanUp(){
		System.out.println("After All cleanUp() method called");
	}
}

Результат вышеуказанного теста:

Before All init() method called
Before Each initEach() method called
After Each cleanUpEach() method called
Before Each initEach() method called
Running addNumber test -> 1
After Each cleanUpEach() method called
Before Each initEach() method called
Running addNumber test -> 2
After Each cleanUpEach() method called
Before Each initEach() method called
Running addNumber test -> 3
After Each cleanUpEach() method called
Before Each initEach() method called
Running addNumber test -> 4
After Each cleanUpEach() method called
Before Each initEach() method called
Running addNumber test -> 5
After Each cleanUpEach() method called
After All cleanUp() method called

2. Пользовательские отображаемые имена

Помимо указания количества повторений, мы можем дать каждому повторению собственное отображаемое имя. Это настраиваемое отображаемое имя может быть комбинацией {статический текст + динамические заполнители}.

В настоящее время поддерживаются три заполнителя (placeholder):

  • {displayName}: отображаемое имя метода @RepeatedTest.

  • {currentRepetition}: текущее количество повторений.

  • {totalRepetitions}: общее количество повторов.

public class JUnit5AnnotationsExample
{
    @DisplayName("Add operation test")
    @RepeatedTest(value = 5, name = "{displayName} - repetition {currentRepetition} of {totalRepetitions}")
    void addNumber(TestInfo testInfo) {
        Assertions.assertEquals(2, Calculator.add(1, 1), "1 + 1 should equal 2");
    }
}

Выполнение вышеуказанного теста дает вывод ниже:

Отображаемые имена повторных тестов JUnit 5
Отображаемые имена повторных тестов JUnit 5

Мы можем использовать один из двух предопределенных форматов, то есть LONG_DISPLAY_NAME и SHORT_DISPLAY_NAME. Последний формат используется по умолчанию, если он не указан.

  • RepeatedTest.LONG_DISPLAY_NAME – {displayName} :: повторение {currentRepetition} из {totalRepetitions}

  • RepeatedTest.SHORT_DISPLAY_NAME – повторение {currentRepetition} из {totalRepetitions}

@DisplayName("Add operation test")
@RepeatedTest(value = 5, name = RepeatedTest.LONG_DISPLAY_NAME)
void addNumber(TestInfo testInfo) {
    Assertions.assertEquals(2, Calculator .add(1, 1), "1 + 1 should equal 2");
}

3. Интерфейс RepetitionInfo

Интерфейс RepetitionInfo используется для получения информации о текущем повторении повторяющегося теста внутри @RepeatedTest методов, или методов жизненного цикла, таких как @BeforeEach, и @AfterEach.

public class JUnit5AnnotationsExample {

	@BeforeEach
	public void initEach(RepetitionInfo info){
		int currentRepetition = info.getCurrentRepetition();
        int totalRepetitions = info.getTotalRepetitions();
        //Use information as needed
	}

	@DisplayName("Add operation test")
	@RepeatedTest(value = 5, name="{displayName} :: repetition {currentRepetition} of {totalRepetitions}")
	void addNumber(TestInfo testInfo) {
		Calculator calculator = new Calculator();
		Assertions.assertEquals(2, calculator.add(1, 1), "1 + 1 should equal 2");
	}

	@AfterEach
	public void cleanUpEach(RepetitionInfo info){
		int currentRepetition = info.getCurrentRepetition();
        int totalRepetitions = info.getTotalRepetitions();
        //Use information as needed
	}
}

Хорошего изучения!!!

Исходный код Скачать

Источник: https://habr.com/ru/post/590927/


Интересные статьи

Интересные статьи

Есть устоявшеёся мнение, что для хороших продуктов руководство пользователя не нужно. Очередной холивар на эту тему разгорелся в нашем рабочем чате. Я не до конца согласен с этим утверждением. Хо...
Часто при разговорах с клиентами мы спрашиваем, как они ведут учет различных данных и используют ли они CRM-систему? Популярный ответ — мы работаем с Excel-файлами, а пот...
Не так давно мы опубликовали материал о тестировании Unity Cloth на мобильных устройствах. В другой статье на render.ru рассказали о том, как арт-отделу Plarium Krasnodar...
Доброго времени суток, друзья! Представляю вашему вниманию полное визуальное руководство-шпаргалку по всем свойствам CSS-модулей Flexbox и Grid. Основные источники: A Complete G...
Ранее в одном из наших КП добавление задач обрабатывалось бизнес-процессами, сейчас задач стало столько, что бизнес-процессы стали неуместны, и понадобился инструмент для массовой заливки задач на КП.