Java что такое junit

Туториал по JUnit 5 — Введение

Три дня назад мной был опубликован перевод: JUnit — создание отчетов в формате HTML

В комментарии к нему @LeshaRB задал вопрос: «Это будет перевод всех статей цикла Junit5 или просто одна?»

В качестве ответа — эта публикация.

В этом туториале по JUnit 5 рассказывается о том, как JUnit адаптировал стиль кодирования Java 8 и некоторые другие функции. Узнайте, чем JUnit 5 отличается от JUnit 4.

JUnit 5 — наиболее широко используемая среда тестирования для приложений Java. JUnit долгое время отлично справлялся со своей задачей.

Между тем, JDK 8 привнес в java интересные функции и, в первую очередь, лямбда-выражения. JUnit 5 был нацелен на адаптацию стиля программирования Java 8; вот почему Java 8 является минимально необходимой версией для создания и выполнения тестов в JUnit 5 (хотя можно запускать тесты, написанные с помощью JUnit 3 или JUnit 4 для обратной совместимости).

  1. Архитектура JUnit 5
  2. Установка
  3. Аннотации JUnit 5
  4. Написание тестов
  5. Написание наборов тестов
  6. Утверждения
  7. Предположения
  8. Обратная совместимость для JUnit 4
  9. Заключение

1. Архитектура JUnit 5

По сравнению с JUnit 4, JUnit 5 состоит из нескольких разных модулей из трех разных подпроектов:

JUnit 5 = Платформа JUnit + JUnit Jupiter + JUnit Vintage

Архитектура JUnit 5

  • JUnit Jupiter: включает новые модели программирования и расширения для написания тестов. В нем есть все новые аннотации junit и TestEngine реализация для запуска тестов, написанных с этими аннотациями.
  • Платформа JUnit: чтобы иметь возможность запускать тесты junit, IDE, инструменты сборки или плагины должны включать и расширять API платформы. Он определяет TestEngine API для разработки новых фреймворков тестирования, работающих на платформе. Он также предоставляет средство запуска консоли для запуска платформы из командной строки и создания подключаемых модулей для Gradle и Maven.
  • JUnit Vintage: его основная цель — поддерживать выполнение на платформе JUnit 5 тестов, написанных для JUnit 3 и JUnit 4. Это есть обратная совместимость.

2. Установка

Вы можете использовать JUnit 5 в своем проекте Maven или Gradle, включив как минимум следующие зависимости:

  • junit-jupiter-api: это основной модуль, в котором расположены все основные аннотации, такие как @Test, аннотации и утвержденияметода жизненного цикла.
  • junit-jupiter-engine: он имеет реализацию тестового движка, которая требуется во время выполнения для выполнения тестов.
  • junit-platform-suite: поддержка @Suite, предоставляемая этим модулем, чтобы сделать средство запуска JUnitPlatform устаревшим.
 5.8.1 1.8.1   org.junit.jupiter junit-jupiter-engine $ test  org.junit.jupiter junit-jupiter-api $ test  org.junit.jupiter junit-jupiter-params $ test  org.junit.platform junit-platform-suite $ test  

build.gradle

build.gradledependencies < testRuntime("org.junit.jupiter:junit-jupiter-api:5.8.1") testRuntime("org.junit.jupiter:junit-jupiter-engine:5.8.1") testRuntime("org.junit.jupiter:junit-jupiter-params:5.8.1") testRuntime("org.junit.platform:junit-platform-suite:1.8.1") >test

Модули JUNit 5

3. Аннотации JUnit 5

JUnit 5 предлагает следующие аннотации для написания тестов.

Аннотированный метод будет запускаться перед каждым тестовым методом в тестовом классе.

Аннотированный метод будет запускаться после каждого тестового метода в тестовом классе.

Аннотированный метод будет запущен перед всеми тестовыми методами в тестовом классе. Этот метод должен быть статическим.

Аннотированный метод будет запущен после всех тестовых методов в тестовом классе. Этот метод должен быть статическим.

Он используется, чтобы пометить метод как тест junit.

Используется для предоставления любого настраиваемого отображаемого имени для тестового класса или тестового метода

Он используется для отключения или игнорирования тестового класса или тестового метода из набора тестов.

Используется для создания вложенных тестовых классов

Пометьте методы тестирования или классы тестов тегами для обнаружения и фильтрации тестов.

Отметить метод — это тестовая фабрика для динамических тестов.

4. Написание тестов

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

Обратите внимание, что все аннотации взяты из пакета org.junit.jupiter.api.

JUnit 5 Tests

import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import com.howtodoinjava.junit5.examples.Calculator; public class AppTest < @BeforeAll static void setup()< System.out.println("@BeforeAll executed"); >@BeforeEach void setupThis() < System.out.println("@BeforeEach executed"); >@Tag("DEV") @Test void testCalcOne() < System.out.println("======TEST ONE EXECUTED======="); Assertions.assertEquals( 4 , Calculator.add(2, 2)); >@Tag("PROD") @Disabled @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"); >>

5. Написание наборов тестов

Используя наборы тестов JUnit 5, вы можете запускать тесты, распределенные по нескольким тестовым классам и различным пакетам. JUnit 5 предоставляет эти аннотации для создания наборов тестов.

  • @Suite
  • @SelectClasses
  • @SelectPackages
  • @IncludePackages
  • @ExcludePackages
  • @IncludeClassNamePatterns
  • @ExcludeClassNamePatterns
  • @IncludeTags
  • @ExcludeTags

Для выполнения пакета вам необходимо использовать @Suite аннотацию и включить модуль junit-platform-suite в зависимости проекта.

@Suite @SelectPackages("com.howtodoinjava.junit5.examples") public class JUnit5TestSuiteExample

6. Assertions

Assertions (утверждения) позволяют сравнить ожидаемый результат с фактическим результатом теста.

Для того чтобы держать вещи простыми, все утверждения JUnit Jupiter являются static методы в класса org.junit.jupiter.Assertions, например assertEquals() , assertNotEquals() .

void testCase() < //Test will pass Assertions.assertNotEquals(3, Calculator.add(2, 2)); //Test will fail Assertions.assertNotEquals(4, Calculator.add(2, 2), "Calculator.add(2, 2) test failed"); //Test will fail SuppliermessageSupplier = () -> "Calculator.add(2, 2) test failed"; Assertions.assertNotEquals(4, Calculator.add(2, 2), messageSupplier); >

7. Assumptions

Класс Assumptions (предположения) предоставляет static методы для поддержки выполнения условного теста на основе предположений. Неуспешное предположение приводит к прерыванию теста.

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

Предположения класс имеет три таких методов: assumeFalse() , assumeTrue() и assumingThat()

public class AppTest < @Test void testOnDev() < System.setProperty("ENV", "DEV"); Assumptions.assumeTrue("DEV".equals(System.getProperty("ENV")), AppTest::message); >@Test void testOnProd() < System.setProperty("ENV", "PROD"); Assumptions.assumeFalse("DEV".equals(System.getProperty("ENV"))); >private static String message () < return "TEST Execution Failed :: "; >>

8. Обратная совместимость с JUnit 4

JUnit 4 существует уже довольно давно, и на junit 4 написано множество тестов. JUnit Jupiter также должен поддерживать эти тесты. Для этого был разработан подпроект JUnit Vintage.

JUnit Vintage предоставляет TestEngine реализацию для запуска тестов на основе JUnit 3 и JUnit 4 на платформе JUnit 5.

9. Заключение

JUnit 5 кажется таким захватывающим и многофункциональным. И теперь он открыт для расширения сторонними инструментами и API. Как автор тестов, вы можете не чувствовать очень большой разницы, но, когда вы используете расширение или попытаетесь разработать плагин для IDE, вы его оцените.

Вы также можете рассмотреть возможность добавления тестовых шаблонов в Eclipse IDE, чтобы повысить скорость разработки как разработчика.

Переведены следующие части туториала:

  • Жизненный цикл JUnit 5 теста
  • Аннотация @BeforeAll
  • Аннотация @BeforeEach
  • Аннотация @AfterEach
  • Аннотация @AfterAll
  • Аннотация @RepeatedTest
  • Аннотация @Disabled
  • Аннотация @ParameterizedTest
  • Ожидаемое исключение JUnit 5
  • Примеры утверждений JUnit 5
  • Отчеты о покрытии кода JUnit тестами с помощью Maven плагина JaCoCo
  • JUnit — создание отчетов в формате HTML

Источник

Java что такое junit

Fork me on GitHub

Оцените статью