Это продолжение туториала по JUnit 5. Введение опубликовано здесь.
Аннотация @AfterEach используется для обозначения того, что аннотированный метод должен выполняться после каждого метода, помеченного @Test, @RepeatedTest, @ParameterizedTest, или @TestFactory в текущем классе.
Аннотация JUnit 5 @AfterEach является заменой аннотации @After в JUnit 4.
По умолчанию тестовые методы будут выполняться в том же потоке, что и аннотированный @AfterEach метод.
1. Использование @AfterEach
Добавьте аннотацию @AfterEach к методу, как указано ниже:
@AfterEach public void cleanUpEach(){ //Test cleanup code } @Test void succeedingTest() { //test code and assertions }
Аннотированный @AfterEach метод НЕ ДОЛЖЕН быть статическим, иначе он вызовет ошибку времени выполнения.
@AfterEach public static void cleanUpEach(){ //Test cleanup code } //Error org.junit.platform.commons.JUnitException: @AfterEach method 'public static void com.howtodoinjava.junit5.examples.JUnit5AnnotationsExample.cleanUpEach()' must not be static.
@AfterEach в родительском и дочернем классах
Метод, аннотированный
@AfterEach,наследуется от родительских классов (или интерфейсов) до тех пор, пока они не скрыты или не переопределены.Кроме того, метод из родительских классов (или интерфейсов) будет выполняться после метода в дочерних классах.
@AfterEach@AfterEach.
2. Пример аннотации @AfterEach
Рассмотрим пример. Мы использовали класс Calculator и добавили метод add.
Выполним тест 5 раз с помощью аннотации @RepeatedTest. Эта аннотация приведет к тому, что тест add будет запущен 5 раз.
Для каждого вызова тестового метода аннотированный @AfterEach метод также должен запускаться один раз.
import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Assertions; 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; public class AfterAnnotationsTest { @DisplayName("Add operation test") @RepeatedTest(5) void addNumber(TestInfo testInfo, RepetitionInfo repetitionInfo) { System.out.println("Running test -> " + repetitionInfo.getCurrentRepetition()); Assertions.assertEquals(2, Calculator.add(1, 1), "1 + 1 should equal 2"); } @AfterAll public static void cleanUp(){ System.out.println("After All cleanUp() method called"); } @AfterEach public void cleanUpEach(){ System.out.println("After Each cleanUpEach() method called"); } }
Это класс калькулятора:
package com.howtodoinjava.junit5.examples; public class Calculator { public int add(int a, int b) { return a + b; } }
Running test -> 1 After Each cleanUpEach() method called Running test -> 2 After Each cleanUpEach() method called Running test -> 3 After Each cleanUpEach() method called Running test -> 4 After Each cleanUpEach() method called Running test -> 5 After Each cleanUpEach() method called After All cleanUp() method called
Очевидно, что аннотированный @AfterEach метод cleanUpEach() вызывается один раз при вызове тестового метода.
Хорошего изучения!!!
