Это продолжение туториала по JUnit 5. Введение опубликовано здесь.
В JUnit 5 жизненный цикл теста управляется четырьмя основными аннотациями, то есть @BeforeAll, @BeforeEach, @AfterEach и @AfterAll. Вместе с тем, каждый тестовый метод должен быть помечен аннотацией @Test из пакета org.junit.jupiter.api.
Оглавление
Фазы жизненного цикла теста
Аннотации Before и After
Отключение тестов
Assertions
Assumptions
1. Фазы жизненного цикла теста
Обычно тестовый класс содержит несколько тестовых методов. JUnit управляет выполнением каждого метода тестирования в форме жизненного цикла.
Полный жизненный цикл тестового сценария можно разделить на три фазы с помощью аннотаций.
Setup (настройка): на этом этапе создается тестовая инфраструктура. JUnit обеспечивает настройку уровня класса (@BeforeAll) и настройку уровня метода (@BeforeEach). Как правило, тяжелые объекты, такие как подключения к базам данных, создаются при настройке уровня класса, в то время как легкие объекты, такие как тестовые объекты, перезапускаются при настройке уровня метода.
Test Execution (выполнение теста): на этом этапе происходит выполнение теста и assertion. Результат выполнения будет означать успех или неудачу теста.
Cleanup (очистка): этот этап используется для очистки настройки тестовой инфраструктуры, настроенной на первом этапе. Как на этане настройки, очистка также выполняется на уровне класса (@AfterAll) и уровне метода (@AfterEach).

2. Аннотации Before и After
Как показано выше, в жизненном цикле теста нам в первую очередь потребуются аннотированные методы для настройки и очистки тестовой среды или тестовых данных, на которых выполняются тесты.
В JUnit по умолчанию для каждого метода тестирования создается новый экземпляр теста.
Аннотации @BeforeAll и @AfterAll - понятные по названию - должны вызываться только один раз за весь цикл выполнения тестов. Поэтому они должны быть объявлены
static.@BeforeEachи@AfterEachвызываются для каждого экземпляра теста, поэтому они не должны бытьstatic.Если есть несколько методов, помеченных одной и той же аннотацией (например, два метода с
@BeforeAll), то порядок их выполнения не определен.
public class AppTest { @BeforeAll static void setup(){ System.out.println("@BeforeAll executed"); } @BeforeEach void setupThis(){ System.out.println("@BeforeEach executed"); } @Test void testCalcOne() { System.out.println("======TEST ONE EXECUTED======="); Assertions.assertEquals( 4 , Calculator.add(2, 2)); } @Test void testCalcTwo() { System.out.println("======TEST TWO EXECUTED======="); Assertions.assertEquals( 6 , Calculator.add(2, 4)); } @AfterEach void tearThis(){ System.out.println("@AfterEach executed"); } @AfterAll static void tear(){ System.out.println("@AfterAll executed"); } }
Тестовый вывод:
@BeforeAll executed @BeforeEach executed ======TEST ONE EXECUTED======= @AfterEach executed @BeforeEach executed ======TEST TWO EXECUTED======= @AfterEach executed @AfterAll executed
3. Отключение тестов
Чтобы отключить тест в JUnit 5, вам нужно будет использовать аннотацию @Disabled. Это эквивалентно аннотации @Ignored JUnit 4.
Аннотация @Disabled может быть применена к классу тестирования (отключает все методы тестирования в этом классе) или к отдельным методам тестирования.
@Disabled @Test void testCalcTwo() { System.out.println("======TEST TWO EXECUTED======="); Assertions.assertEquals( 6 , Calculator.add(2, 4)); }
4. Assertions
В любом методе тестирования нам нужно будет определить, прошел он или нет. Мы можем сделать это с помощью Assertions (утверждений).
Утверждения помогают сравнить ожидаемый результат с фактическим результатом теста. Для простоты все утверждения JUnit Jupiter являются статическими методами в классе org.junit.jupiter.Assertions.
@Test public void test() { //Test will pass Assertions.assertEquals(4, Calculator.add(2, 2)); //Test will fail Assertions.assertEquals(3, Calculator.add(2, 2), "Calculator.add(2, 2) test failed"); //Test will fail Supplier<String> messageSupplier = ()-> "Calculator.add(2, 2) test failed"; Assertions.assertEquals(3, Calculator.add(2, 2), messageSupplier); }
Чтобы тест не прошел, просто используйте метод Assertions.fail().
@Test void testCase() { Assertions.fail("not found good reason to pass"); }
5. Assumptions
Assumptions (предположения) предоставляют static методы для поддержки выполнения условного теста на основе предположений. Неуспешное предположение приводит к прерыванию теста.
Предположения обычно используются всякий раз, когда нет смысла продолжать выполнение данного метода тестирования. В отчете о тестировании эти тесты будут отмечены как пройденные.
Класс предположений имеет три метода со многими перегруженными формами:
assumeFalse():проверяет, что данное предположение false.assumeTrue(): подтверждает данное предположение, чтобы быть true.assumingThat(): выполняет предоставленный методExecutable, но только если предоставленное предположение верно.
@Test void testOnDev() { System.setProperty("ENV", "DEV"); Assumptions.assumeTrue("DEV".equals(System.getProperty("ENV"))); //remainder of test will proceed } @Test void testOnProd() { System.setProperty("ENV", "PROD"); Assumptions.assumeTrue("DEV".equals(System.getProperty("ENV"))); //remainder of test will be aborted }
Выше перечислены аннотации и классы для жизненного цикла JUnit теста.
Хорошего изучения!!!
