Это продолжение туториала по 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 executed3. Отключение тестов
Чтобы отключить тест в 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 теста.
Хорошего изучения!!!
 
          