Юнит
Разработчик(и) | Кент Бек , Эрих Гамма , Дэвид Сафф, Крис Васудеван |
---|---|
Стабильная версия | 5.10.0
/ 23 июля 2023 г [1] |
Репозиторий | |
Написано в | Ява |
Операционная система | Кросс-платформенный |
Тип | модульного тестирования Инструмент |
Лицензия | Публичная лицензия Eclipse 2.0 [2] ( перелицензирован ранее) |
Веб-сайт | Юнит |
JUnit — это автоматизации тестирования среда для языка программирования Java . JUnit часто используется для модульного тестирования и является одной из платформ xUnit .
JUnit подключается как JAR во время компиляции. Последняя версия платформы JUnit 5 находится в пакете org.junit.jupiter
. [3] Предыдущие версии JUnit 4 [3] и JUnit 3 находились в пакетах org.junit
и junit.framework
, соответственно.
Исследование, проведенное в 2013 году среди 10 000 проектов Java, размещенных на GitHub, показало, что JUnit (вместе с slf4j-api ) была наиболее часто включаемой внешней библиотекой. Каждую библиотеку использовали в 30,7% проектов. [4]
Жизненный цикл JUnit
[ редактировать ]Каждый тестовый класс JUnit обычно имеет несколько тестовых примеров. Эти тестовые примеры подчиняются жизненному циклу теста. Полный жизненный цикл JUnit состоит из трех основных этапов: [5]
- Этап настройки. На этом этапе готовится тестовая инфраструктура. Доступны два уровня настройки. Первый тип настройки — это настройка на уровне класса, при которой объект, требующий больших вычислительных затрат, например соединение с базой данных, создается и повторно используется с минимальными побочными эффектами. Настройка на уровне класса реализована с помощью
@BeforeAll
аннотация. Другой тип настраивается перед запуском каждого тестового примера, в котором используется@BeforeEach
аннотация. [5] - Выполнение теста. Этот этап отвечает за запуск теста и проверку результата. Результат теста покажет, является ли результат теста успешным или неудачным.
@Test
здесь используется аннотация. [5] - Фаза очистки. После выполнения всех посттестов системе может потребоваться выполнить очистку. Подобно настройке на уровне класса, существует соответствующая очистка на уровне класса.
@AfterAll
аннотация используется для поддержки очистки на уровне класса.@AfterEach
аннотация позволяет выполнить очистку после выполнения теста. [5]
Интеграция с другими инструментами
[ редактировать ]JUnit 5 объединяет ряд инструментов, таких как инструменты сборки , интегрированные среды разработки (IDE), инструменты непрерывной интеграции (CI) и многие другие. [6]
Инструменты сборки
[ редактировать ]JUnit поддерживает инструменты сборки Apache Ant , Apache Maven и Gradle , которые являются наиболее широко используемыми инструментами сборки проектов. [7] Инструменты сборки жизненно важны для автоматизации процесса сборки проекта. [6]
Расширение муравья
[ редактировать ]Apache Ant, также известный как Ant, является одним из инструментов сборки с высочайшей степенью универсальности и имеет самую длинную историю из трех инструментов сборки, перечисленных выше. [8] Муравей сосредотачивается вокруг build.xml
файл, используемый для настройки задач, необходимых для запуска проекта. [8] У Ant также есть расширение под названием Apache Ivy , которое помогает справляться с разрешением зависимостей. Зависимости проекта могут быть объявлены в ivy.xml
файл. Ant может интегрироваться с JUnit 5, настроив инструменты покрытия кода Java (JaCoCo). ivy.xml
файл. [8] ivy.xml
затем можно настроить с помощью java-platform-console
и junit-platform-runner
зависимости для интеграции с JUnit 5. [9]
Расширение Maven
[ редактировать ]В отличие от Ant, Apache Maven, также известный как Maven, использует стандартизированный и унифицированный подход к процессу сборки. [10] Maven следует парадигме «соглашение важнее конфигурации» для управления своими зависимостями. [11] Исходный код Java (или «src») можно найти в разделе src/main/java
каталог, а тестовые файлы можно найти в папке src/test/java
каталог. [11] Maven можно использовать для любого Java-проекта. [10] Он использует объектную модель проекта (POM), которая представляет собой основанный на XML подход к настройке этапов сборки проекта. [10] Минимальный Maven с pom.xml
Файл сборки должен содержать список зависимостей и уникальный идентификатор проекта. [10] Для работы Maven должен быть доступен на пути сборки. [10] Maven может интегрироваться с JUnit 5 с помощью jacoco-maven-plugin
плагин , который поддерживает готовые функции для тестов JUnit 5. [12] Для достижения этих задач можно указать различные цели Maven. [12]
Расширение Gradle
[ редактировать ]Gradle — это инструмент сборки, который заимствует многие концепции у своих предшественников Ant и Maven. [11] Он использует build.gradle
файл, чтобы объявить шаги, необходимые для сборки проекта. [11] В отличие от Ant и Maven, основанных на XML, Gradle требует использования Apache Groovy , языка программирования на основе Java. [11] В отличие от Ant и Maven, Gradle не требует использования XML. [11] Gradle по-прежнему придерживается подхода Maven «соглашение о конфигурации» и следует той же структуре для src/main/java
и src/test/java
каталоги. [11] Gradle можно интегрировать с JUnit 5 путем настройки плагина. jacoco
вместе с плагином junit-platform, предоставленным командой JUnit 5 в файле сборки. [13]
Модель расширения JUnit
[ редактировать ]JUnit следует парадигме предпочтения точек расширения функциям. [14] Команда JUnit решила не помещать все функции в ядро JUnit, а вместо этого решила предоставить разработчикам расширяемый способ решения своих проблем. [14]
В JUnit 4 есть два механизма расширения: Runner API и Rule API. [15] И у Runner API, и у Rule API были некоторые недостатки.
Основным ограничением Runner API является то, что разработчик должен реализовать весь жизненный цикл, даже если ему нужен только определенный этап жизненного цикла. [15] Это слишком сложно и тяжеловесно для большинства случаев использования. [15] Еще одним серьезным ограничением является то, что для каждого тестового примера используется только один класс бегуна, что делает их несоставляемыми. [15] Например, бегуны Mockito и параметризованные не могут существовать в одном тестовом классе. [15]
Основным ограничением Rule API является то, что он не может контролировать весь жизненный цикл теста, поэтому его нельзя использовать для каждого отдельного варианта использования. [15] Они подходят только тогда, когда что-то должно произойти до или после выполнения тестового примера. [15] Еще одним важным ограничением является то, что правила для обратных вызовов на уровне класса и на уровне метода должны создаваться отдельно. [15]
В JUnit 5 API расширения находится в движке JUnit Jupiter Engine. [16] Команда JUnit хочет позволить разработчику подключаться к отдельным этапам жизненного цикла теста, предоставляя единый API расширений. [16] По достижении определенной фазы жизненного цикла Jupiter Engine вызовет все зарегистрированные расширения для этой фазы. [16] Разработчик может подключиться к пяти основным точкам расширения: [16]
- Обратные вызовы жизненного цикла теста. Это позволяет разработчику подключаться к определенным этапам жизненного цикла теста. [17]
- Постобработка тестового экземпляра — позволяет разработчику подключиться после создания тестового экземпляра путем реализации интерфейса TestInstancePostProcessor. [18]
- Условное выполнение теста — это позволяет разработчику выполнить тестовый пример только после соответствия определенным критериям. [19]
- Разрешение параметра. Это позволяет разработчику разрешить параметр после его получения от тестового метода или конструктора.
- Обработка исключений. Вариант использования обработки исключений — изменение поведения тестирования вместо создания исключения. [20]
Пример тестового приспособления JUnit
[ редактировать ] JUnit Тестовое приспособление — это объект Java. Методы испытаний должны быть аннотированы @Test
аннотация . Если этого требует ситуация, [21] также можно определить метод, который будет выполняться до (или после) каждого (или всех) методов тестирования с помощью @BeforeEach
(или @AfterEach
) и @BeforeAll
(или @AfterAll
) аннотации. [22] [23]
import org.junit.jupiter.api.*;
class FoobarTests {
@BeforeAll
static void setUpClass() throws Exception {
// Code executed before the first test method
}
@BeforeEach
void setUp() throws Exception {
// Code executed before each test
}
@Test
void oneThing() {
// Code that tests one thing
}
@Test
void anotherThing() {
// Code that tests another thing
}
@Test
void somethingElse() {
// Code that tests something else
}
@AfterEach
void tearDown() throws Exception {
// Code executed after each test
}
@AfterAll
static void tearDownClass() throws Exception {
// Code executed after the last test method
}
}
Предыдущие версии JUnit
[ редактировать ]По словам Мартина Фаулера, одного из первых последователей JUnit: [24]
JUnit родился во время полета из Цюриха на турнир OOPSLA в 1997 году в Атланте. Кент летел с Эрихом Гаммой, а что еще оставалось делать двум гикам в долгом полете, кроме программы? Там была собрана первая версия JUnit, запрограммирована пара и сначала проведено тестирование (приятная форма метациклического чудачества).
Побочным эффектом широкого использования является то, что предыдущие версии JUnit остаются популярными: JUnit 4 используется более 100 000 раз другими программными компонентами в центральном репозитории Maven . [25]
В JUnit 4 аннотации для обратных вызовов выполнения тестов были @BeforeClass
, @Before
, @After
, и @AfterClass
, в отличие от JUnit 5 @BeforeAll
, @BeforeEach
, @AfterEach
, и @AfterAll
. [22] [23]
В JUnit 3 тестовые приспособления должны были наследовать от junit.framework.TestCase
. [26] Кроме того, методы тестирования должны были иметь префикс «test». [27]
См. также
[ редактировать ]- xUnit — семейство сред тестирования, включая JUnit.
- SUnit , оригинальная версия Smalltalk, написанная Кентом Беком, на основе которой был написан JUnit.
- TestNG , еще один тестовый фреймворк для Java.
- Mock object — метод, используемый во время модульного тестирования.
- Mockito — макетная библиотека для помощи в написании тестов.
- EvoSuite , инструмент для автоматической генерации тестов JUnit.
- Список Java-фреймворков
Цитаты
[ редактировать ]- ^ «Релизы JUnit» . github.com . Проверено 23 июля 2023 г.
- ^ «Изменить лицензию на EPL v2.0» . github.com . 7 сентября 2017 г. Проверено 4 февраля 2021 г.
- ^ Jump up to: а б Гулати и Шарма 2017 , с. 144, §Глава 8. Динамические тесты и переход с Junit 4.
- ^ «Мы проанализировали 30 000 проектов GitHub — вот 100 лучших библиотек на Java, JS и Ruby» . Архивировано из оригинала 9 июля 2014 г. Проверено 9 февраля 2014 г.
- ^ Jump up to: а б с д Гулати и Шарма 2017 , стр. 37–40, глава §2 API JUnit LifeCycle.
- ^ Jump up to: а б Гулати и Шарма 2017 , с. 99, Глава §6 Инструменты интеграции.
- ^ Гулати и Шарма 2017 , стр. 99–117, глава §6 Инструменты сборки.
- ^ Jump up to: а б с Гулати и Шарма 2017 , стр. 108–112, глава §6. Инструменты интеграции — инструменты сборки — Ant.
- ^ Гулати и Шарма 2017 , стр. 116–117, глава §6. Инструменты интеграции — инструменты сборки — расширение Ant.
- ^ Jump up to: а б с д и Гулати и Шарма 2017 , стр. 104–108, глава §6. Инструменты интеграции — инструменты сборки — Maven.
- ^ Jump up to: а б с д и ж г Гулати и Шарма 2017 , стр. 99–103, глава §6. Инструменты интеграции — инструменты сборки — Gradle.
- ^ Jump up to: а б Гулати и Шарма 2017 , с. 115, Глава §6 Инструменты интеграции — Инструменты сборки — Расширение Maven.
- ^ Гулати и Шарма 2017 , стр. 113–114, глава §6. Инструменты интеграции — инструменты сборки — расширение Gradle.
- ^ Jump up to: а б Гулати и Шарма 2017 , с. 121, Глава §7 Модель расширения JUnit 5.
- ^ Jump up to: а б с д и ж г час Гулати и Шарма 2017 , стр. 121–122, глава §7 Модель расширения JUnit 4.
- ^ Jump up to: а б с д Гулати и Шарма 2017 , стр. 122–124, Глава §7 Модель расширения JUnit 5 — Модель расширения JUnit 5.
- ^ Гулати и Шарма 2017 , стр. 124–126, глава §7 Модель расширения JUnit 5 — обратные вызовы жизненного цикла тестирования.
- ^ Гулати и Шарма 2017 , стр. 126–127, глава §7 Модель расширения JUnit 5 — постобработка тестового экземпляра.
- ^ Гулати и Шарма 2017 , с. 127, Глава §7 Модель расширения JUnit 5 — выполнение условного теста.
- ^ Гулати и Шарма 2017 , с. 129, Глава §7 Модель расширения JUnit 5 — обработка исключений.
- ^ Кент Бек . «Запах дорогой установки» . С2 Вики . Проверено 28 ноября 2011 г.
- ^ Jump up to: а б «Написание тестов» . junit.org . Проверено 4 февраля 2021 г.
- ^ Jump up to: а б Гулати и Шарма 2017 , с. 37-40, Глава §2. Понимание CoreJunit 5.
- ^ "блики: Xunit" . martinfowler.com . Проверено 7 марта 2022 г.
- ^ «Юнит» . mvnrepository.com . Проверено 29 октября 2021 г.
- ^ Кент Бек ; Эрих Гамма . «Кулинарная книга JUnit» . junit.sourceforge.net. Архивировано из оригинала 15 июня 2020 г. Проверено 21 мая 2011 г.
- ^ Чарльз А. Шарп (август 2007 г.). «Миграция с JUnit 3 на JUnit 4: только хорошие новости» . Объектные вычисления, Inc. Проверено 4 февраля 2021 г.
Ссылки
[ редактировать ]- Гулати, Шекхар; Шарма, Рахул (2017). Модульное тестирование Java с помощью JUnit 5 . Беркли, Калифорния: Apress . дои : 10.1007/978-1-4842-3015-2 . ISBN 978-1-4842-3014-5 .
Внешние ссылки
[ редактировать ]- Официальный сайт
- Ирригер, Аксель. «JUnit — инструмент модульного тестирования Java с открытым исходным кодом» . Методы и инструменты .
- «Юнит» . Память не найдена . Учебники. Архивировано из оригинала 28 января 2015 года.