Junit test framework java

Туториал по 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

Источник

JUnit — Test Framework

JUnit is a Regression Testing Framework used by developers to implement unit testing in Java, and accelerate programming speed and increase the quality of code. JUnit Framework can be easily integrated with either of the following −

Features of JUnit Test Framework

JUnit test framework provides the following important features −

Fixtures

Fixtures is a fixed state of a set of objects used as a baseline for running tests. The purpose of a test fixture is to ensure that there is a well-known and fixed environment in which tests are run so that results are repeatable. It includes −

  • setUp() method, which runs before every test invocation.
  • tearDown() method, which runs after every test method.
import junit.framework.*; public class JavaTest extends TestCase < protected int value1, value2; // assigning the values protected void setUp()< value1 = 3; value2 = 3; >// test method to add two values public void testAdd() < double result = value1 + value2; assertTrue(result == 6); >>

Test Suites

A test suite bundles a few unit test cases and runs them together. In JUnit, both @RunWith and @Suite annotation are used to run the suite test. Given below is an example that uses TestJunit1 & TestJunit2 test classes.

import org.junit.runner.RunWith; import org.junit.runners.Suite; //JUnit Suite Test @RunWith(Suite.class) @Suite.SuiteClasses(< TestJunit1.class ,TestJunit2.class >) public class JunitTestSuite

import org.junit.Test; import org.junit.Ignore; import static org.junit.Assert.assertEquals; public class TestJunit1 < String message = "Robert"; MessageUtil messageUtil = new MessageUtil(message); @Test public void testPrintMessage() < System.out.println("Inside testPrintMessage()"); assertEquals(message, messageUtil.printMessage()); >>
import org.junit.Test; import org.junit.Ignore; import static org.junit.Assert.assertEquals; public class TestJunit2 < String message = "Robert"; MessageUtil messageUtil = new MessageUtil(message); @Test public void testSalutationMessage() < System.out.println("Inside testSalutationMessage()"); message = "Hi!" + "Robert"; assertEquals(message,messageUtil.salutationMessage()); >>

Test Runners

Test runner is used for executing the test cases. Here is an example that assumes the test class TestJunit already exists.

import org.junit.runner.JUnitCore; import org.junit.runner.Result; import org.junit.runner.notification.Failure; public class TestRunner < public static void main(String[] args) < Result result = JUnitCore.runClasses(TestJunit.class); for (Failure failure : result.getFailures()) < System.out.println(failure.toString()); >System.out.println(result.wasSuccessful()); > >

JUnit Classes

JUnit classes are important classes, used in writing and testing JUnits. Some of the important classes are −

  • Assert − Contains a set of assert methods.
  • TestCase − Contains a test case that defines the fixture to run multiple tests.
  • TestResult − Contains methods to collect the results of executing a test case.

Источник

Читайте также:  Запустить скрипт php кнопкой
Оцените статью