Автор оригинала: Pankaj Kumar.
Структура модульного тестирования построена на аннотациях. JUnit 5-это серьезное обновление по сравнению с JUnit 4. Существуют различные модули, и нам нужна платформа JUnit и API JUnit Jupiter для создания и запуска тестовых примеров для нашего java-проекта.
Аннотации JUnit
Давайте рассмотрим наиболее важные аннотации в JUnit 5 Jupiter API. Большинство из них находятся в пакете org.junit.jupiter.api в модуле junit-jupiter-api .
@Тест
Аннотация @Test используется для указания того, что аннотированный метод является методом тестирования.
@Методы тестирования не должны быть частными или статическими. Методы @Test не должны возвращать значение.
@Методы тестирования могут при необходимости объявлять параметры, которые должны быть разрешены с помощью решателей параметров.
Вот простой пример метода @Test.
@Test
void testMethod1() {
System.out.println("test method");
}
@ПараметризоваНный тест
Аннотация JUnit @ParameterizedTest используется для многократного запуска метода тестирования с разными аргументами. Эта аннотация определена в модуле junit-jupiter-params . Эта аннотация также требует, чтобы мы определили источник для аргументов метода. Некоторые из аннотаций, которые могут использоваться в качестве аргументов, являются Источником значений , Источником перечисления , Источником метода , Источником Csv и CsvFileSource . Вот простой пример использования аннотации @ParameterizedTest.
@ParameterizedTest
@ValueSource(strings = { "1", "2", "3" })
void test_ValueSource_String(String s) {
assertTrue(Integer.parseInt(s) < 5);
}
Вы можете прочитать больше о них в параметризованных тестах JUnit .
@Повторное тестирование
Аннотация JUnit @RepeatedTest используется для повторения теста указанное количество раз.
@RepeatedTest(5)
void test() {
System.out.println("@RepeatedTest Simple Example");
}
Вышеуказанный тест будет выполнен 5 раз, подробнее читайте в разделе Повторные тесты JUnit .
@TestFactory
Аннотацию JUnit @TestFactory в сочетании с динамическим тестом можно использовать для создания метода фабрики тестов. Методы JUnit @TestFactory не должны быть частными или статическими. Эти методы должны возвращать поток, Коллекцию, Итерацию или Итератор экземпляров динамических узлов. Вот простой пример метода @TestFactory для создания динамических тестов во время выполнения.
@TestFactory CollectiondynamicTests() { return Arrays.asList( dynamicTest("simple dynamic test", () -> assertTrue(true)), dynamicTest("My Executable Class", new MyExecutable()), dynamicTest("simple dynamic test-2", () -> assertTrue(true)) ); }
Мы также можем создавать динамические тесты для метода класса, подробнее читайте в разделе Динамические тесты JUnit 5 .
@testInstance
Мы можем использовать аннотацию @testInstance для изменения поведения жизненного цикла класса. По умолчанию JUnit создает новый экземпляр каждого тестового класса перед выполнением каждого метода тестирования. Такое поведение называется жизненным циклом экземпляра теста “для каждого метода”. Мы можем изменить его на режим “для каждого класса” для более быстрой обработки тестов, поскольку новый экземпляр теста будет создаваться один раз для каждого тестового класса.
@TestInstance(Lifecycle.PER_CLASS)
class InnerClass {
//tests
}
@Имя дисплея
Эти аннотации используются для определения пользовательского отображаемого имени для тестового класса и методов.
@DisplayName("MyTestClass")
public class DisplayNameTest {
}
@Test
@DisplayName("Example Test Method with No Business Logic")
void test() {
assertTrue(3 > 0);
}
Вы можете прочитать больше об этом в отображаемом имени JUnit .
@Вложенные
Вложенная аннотация JUnit Jupiter @используется для обозначения вложенного класса, который будет включен в тестовые примеры. По умолчанию вложенные классы не проверяются на наличие методов тестирования. Вложенный класс должен быть нестатичным. Вы можете прочитать больше о них в вложенных тестах JUnit .
@Отключено
Аннотация JUnit @Disabled-это самый простой способ отключить тест. Он может быть применен как к методу тестирования, так и к самому классу.
@Test
@Disabled
void test() {
assertTrue(true);
}
@Disabled("Explicitly Disabled")
class DisabledTests {
//all tests disabled
}
JUnit Jupiter предоставляет различные аннотации для включения или отключения теста в зависимости от указанного условия. Некоторые из них @Disabledno , @EnabledOnOs , @DisabledOnJre , @EnabledOnJre , @DisabledIfEnvironmentVariable , @EnabledIfEnvironmentVariable , @DisabledIfSystemProperty , @EnabledIfSystemProperty , @DisabledIf , и @EnabledIf .
Вы можете получить полную информацию об этих аннотациях в разделе JUnit Отключить включение тестов .
Аннотации обратного вызова жизненного цикла JUnit
Существует четыре аннотации, которые мы можем использовать для определения методов обратного вызова на различных этапах выполнения тестовых случаев.
@Перед началом
Означает, что аннотированный метод должен выполняться перед каждым @Test, @RepeatedTest, @ParameterizedTest или @TestFactory методом в текущем классе.
@После каждого
Используется для определения метода, который будет выполняться после каждого метода тестирования в текущем классе. Эти методы также выполняются для каждого теста во вложенных классах.
@Перед всем
Используется для определения метода, который должен быть выполнен перед всеми методами тестирования в текущем классе. Этот метод должен быть статическим, если только экземпляр теста не установлен в режим “для каждого класса”.
@После всего
Эта аннотация используется для определения метода, который будет выполняться после всех методов тестирования в текущем классе. Этот метод должен быть статическим, если только экземпляр теста не установлен в режим “для каждого класса”.
@BeforeAll
static void setUpBeforeClass() throws Exception {
System.out.println("Set Up Before Class - @BeforeAll");
}
@AfterAll
static void tearDownAfterClass() throws Exception {
System.out.println("Tear Down After Class - @AfterAll");
}
@BeforeEach
void setUp() throws Exception {
System.out.println("Set Up @BeforeEach");
}
@AfterEach
void tearDown() throws Exception {
System.out.println("Tear Down @AfterEach");
}
Методы обратного вызова жизненного цикла JUnit могут использоваться для инициализации или уничтожения ресурсов для теста. Они также могут быть использованы для сброса любых общих переменных перед выполнением тестовых случаев.
Резюме
Платформа модульного тестирования построена на аннотациях Java . Они являются неотъемлемой частью платформы JUnit и помогают нам легко писать тесты с меньшим количеством кода.