Туториал по JUnit 5 — Жизненный цикл JUnit 5 теста

от автора

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

В JUnit 5 жизненный цикл теста управляется четырьмя основными аннотациями, то есть @BeforeAll, @BeforeEach, @AfterEach и @AfterAll. Вместе с тем, каждый тестовый метод должен быть помечен аннотацией @Test из пакета org.junit.jupiter.api.

Оглавление

  1. Фазы жизненного цикла теста

  2. Аннотации Before и After

  3. Отключение тестов

  4. Assertions

  5. Assumptions

1. Фазы жизненного цикла теста

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

Полный жизненный цикл тестового сценария можно разделить на три фазы с помощью аннотаций.

  1. Setup (настройка): на этом этапе создается тестовая инфраструктура. JUnit обеспечивает настройку уровня класса (@BeforeAll) и настройку уровня метода (@BeforeEach). Как правило, тяжелые объекты, такие как подключения к базам данных, создаются при настройке уровня класса, в то время как легкие объекты, такие как тестовые объекты, перезапускаются при настройке уровня метода.

  2. Test Execution (выполнение теста): на этом этапе происходит выполнение теста и assertion. Результат выполнения будет означать успех или неудачу теста.

  3. 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 методы для поддержки выполнения условного теста на основе предположений. Неуспешное предположение приводит к прерыванию теста.

Предположения обычно используются всякий раз, когда нет смысла продолжать выполнение данного метода тестирования. В отчете о тестировании эти тесты будут отмечены как пройденные.

Класс предположений имеет три метода со многими перегруженными формами:

  1. assumeFalse(): проверяет, что данное предположение false.

  2. assumeTrue(): подтверждает данное предположение, чтобы быть true.

  3. 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 теста.

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

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


ссылка на оригинал статьи https://habr.com/ru/articles/590699/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *