Рубрики
Без рубрики

JUnit 5 – Написание тестов

В JUnit 5 – Введение мы говорили о JUnit и написали действительно простой тестовый пример. В этом… С пометкой java, тестирование, учебное пособие, новички.

В JUnit 5 – Введение мы говорили о JUnit и написали действительно простой тестовый пример. В этом уроке мы углубимся в написание более сложных методов тестирования.

В JUnit дело не в том, что у вас есть только аннотация @Test для методов тестирования. Могут быть случаи, когда вам придется выполнить тест перед всеми остальными тестами. Или у вас может быть тестовый метод для запуска перед выполнением любого другого тестового метода. Или у вас может быть метод тестирования, который будет выполняться после выполнения всех других методов тестирования. Не волнуйтесь, потому что JUnit охватывает все эти сценарии 😃

Существует 5 фаз, которые может иметь метод тестирования. Они заключаются в следующем;

  • @Перед всеми
  • @Перед каждым
  • @Тест
  • @После каждого
  • @В конце концов

@Перед всеми

Методы тестирования, отмеченные аннотацией @beforeAll , выполняются перед любым из методов тестирования, доступных в классе Test. Давайте напишем простой метод тестирования, используя приведенную выше аннотацию.

@BeforeAll
public static void TestBeforeAll () {
    System.out.println("Should print BEFORE executing any other tests");
}

@Test
public void TestBeforeAllSuccess() {
    System.out.println("Should print AFTER executing TestBeforeAll () method");
}

Как вы можете видеть здесь, я добавил два метода тестирования. Испытание Перед Всеми () с аннотацией @beforeAll и Test Before All Success() – это обычный метод тестирования. Теперь, когда мы запускаем программу Test Before All () выполняется первой. Это означает, что ваш вывод должен выглядеть следующим образом,

@Перед каждым

Методы тестирования, помеченные аннотацией @beforeEach , выполняются перед включением каждого из методов тестирования в тестовый класс.

Если вы помните, в обоих методах тестирования Test Add Employee() и throw RuntimeException При первом имени Null() я использовал строку Manageemployees Manageemployees(); Следовательно, происходит повторение одной и той же строки кода. Мы можем избежать этого, запустив приведенную выше строку внутри нового метода тестирования, используя аннотацию @beforeEach . Это означает, что эта строка будет выполняться до выполнения всех без исключения тестов, доступных в тестовом классе.

ManageEmployees employees;

@BeforeAll
public static void TestBeforeAll () {
    System.out.println("Should print BEFORE executing any other tests");
}

@BeforeEach
public void TestBeforeEach() {
    ManageEmployees employees = new ManageEmployees();
    System.out.println("Execute BEFORE EACH test method");
}

@Test
public void TestBeforeAllSuccess() {
    System.out.println("Should print AFTER executing TestBeforeAll () method");
}

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

@тест

Да, вы знаете эту аннотацию, так как мы использовали ее в предыдущем уроке 😎 Но давайте попробуем немного сложную аннотацию 🤯 Как насчет написания теста для проверки входных данных? Это означает, что вы знаете, что мы не разрешаем оставлять какой-либо атрибут (first_name, last_name или contact_number) пустым. Мы можем написать отдельные методы тестирования для создания исключений, когда любое из вышеуказанных полей пусто.

@Test
@DisplayName("Object should not create when first_name is null")
public void throwRuntimeExceptionWhenFirstNameIsNull() {
    ManageEmployees employees = new ManageEmployees();
    Assertions.assertThrows(RuntimeException.class, () -> {
        employees.addEmployee(null, "Cullen", "0123456789");
    });
    System.out.println("Number of Employees: " + employees.getEmployees().size());
}

Согласно приведенному выше коду, он выдает исключение RuntimeException, когда вы пытаетесь создать объект с пустым именем и не создаете объект. Я добавил оператор печати, чтобы вы могли четко видеть, что объект не создан. Посмотрите на терминал ниже.

Вы можете видеть, что количество сотрудников равно нулю, что означает, что объект создан не так, как мы ожидали 🙂

@DisplayName в приведенном выше коде – это пользовательское имя, которое вы можете предоставить для метода тестирования, чтобы повысить удобочитаемость, помимо имени метода тестирования.

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

@После каждого

Методы тестирования, отмеченные аннотацией @afterEach , выполняются после каждого метода тестирования внутри тестового класса. Посмотрите на два метода тестирования, которые я добавил.

@Test
public void TestAfterEachSuccess() {
    System.out.println("Should print BEFORE executing TestAfterEach () method");
}

@AfterEach
public void TestAfterEach() {
    System.out.println("Should print AFTER the execution of EACH test method.");
}

Теперь давайте запустим и посмотрим, как происходит выполнение методов тестирования.

Как вы можете видеть Test After Each() выполняется после выполнения каждого метода тестирования.

@В конце концов

Методы тестирования, отмеченные аннотацией @AfterAll , выполняются после завершения выполнения всех методов тестирования в тестовом классе.

 @AfterAll
public static void TestAfterAll() {
    System.out.println("Should execute AFTER ALL the test methods");
}

Как вы можете видеть, метод тестирования Test After All() выполняется после выполнения всех других методов тестирования.

Это пять этапов жизненного цикла тестирования . Основное использование этого жизненного цикла заключается в выполнении задач инициализации или задач очистки.

  1. @Перед всеми и @beforeEach : для выполнения задач инициализации для тестов.
  2. @После каждого и @AfterAll : для выполнения задач очистки для тестов.

На этом мы подошли к концу этого урока. Вы можете узнать, как писать повторяющиеся тесты и условные тесты, в следующем руководстве 😎

Оригинал: “https://dev.to/chathurashmini/junit-5-writing-tests-27a4”