Jump to content

Юнит

Юнит
Разработчик(и) Кент Бек , Эрих Гамма , Дэвид Сафф, Крис Васудеван
Стабильная версия
5.10.0 / 23 июля 2023 г .; 12 месяцев назад ( 23.07.2023 ) [1]
Репозиторий
Написано в Ява
Операционная система Кросс-платформенный
Тип модульного тестирования Инструмент
Лицензия Публичная лицензия Eclipse 2.0 [2] ( перелицензирован ранее)
Веб-сайт Юнит .org

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]

  1. Этап настройки. На этом этапе готовится тестовая инфраструктура. Доступны два уровня настройки. Первый тип настройки — это настройка на уровне класса, при которой объект, требующий больших вычислительных затрат, например соединение с базой данных, создается и повторно используется с минимальными побочными эффектами. Настройка на уровне класса реализована с помощью @BeforeAll аннотация. Другой тип настраивается перед запуском каждого тестового примера, в котором используется @BeforeEach аннотация. [5]
  2. Выполнение теста. Этот этап отвечает за запуск теста и проверку результата. Результат теста покажет, является ли результат теста успешным или неудачным. @Test здесь используется аннотация. [5]
  3. Фаза очистки. После выполнения всех посттестов системе может потребоваться выполнить очистку. Подобно настройке на уровне класса, существует соответствующая очистка на уровне класса. @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]

  1. Обратные вызовы жизненного цикла теста. Это позволяет разработчику подключаться к определенным этапам жизненного цикла теста. [17]
  2. Постобработка тестового экземпляра — позволяет разработчику подключиться после создания тестового экземпляра путем реализации интерфейса TestInstancePostProcessor. [18]
  3. Условное выполнение теста — это позволяет разработчику выполнить тестовый пример только после соответствия определенным критериям. [19]
  4. Разрешение параметра. Это позволяет разработчику разрешить параметр после его получения от тестового метода или конструктора.
  5. Обработка исключений. Вариант использования обработки исключений — изменение поведения тестирования вместо создания исключения. [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-фреймворков
  1. ^ «Релизы JUnit» . github.com . Проверено 23 июля 2023 г.
  2. ^ «Изменить лицензию на EPL v2.0» . github.com . 7 сентября 2017 г. Проверено 4 февраля 2021 г.
  3. ^ Jump up to: а б Гулати и Шарма 2017 , с. 144, §Глава 8. Динамические тесты и переход с Junit 4.
  4. ^ «Мы проанализировали 30 000 проектов GitHub — вот 100 лучших библиотек на Java, JS и Ruby» . Архивировано из оригинала 9 июля 2014 г. Проверено 9 февраля 2014 г.
  5. ^ Jump up to: а б с д Гулати и Шарма 2017 , стр. 37–40, глава §2 API JUnit LifeCycle.
  6. ^ Jump up to: а б Гулати и Шарма 2017 , с. 99, Глава §6 Инструменты интеграции.
  7. ^ Гулати и Шарма 2017 , стр. 99–117, глава §6 Инструменты сборки.
  8. ^ Jump up to: а б с Гулати и Шарма 2017 , стр. 108–112, глава §6. Инструменты интеграции — инструменты сборки — Ant.
  9. ^ Гулати и Шарма 2017 , стр. 116–117, глава §6. Инструменты интеграции — инструменты сборки — расширение Ant.
  10. ^ Jump up to: а б с д и Гулати и Шарма 2017 , стр. 104–108, глава §6. Инструменты интеграции — инструменты сборки — Maven.
  11. ^ Jump up to: а б с д и ж г Гулати и Шарма 2017 , стр. 99–103, глава §6. Инструменты интеграции — инструменты сборки — Gradle.
  12. ^ Jump up to: а б Гулати и Шарма 2017 , с. 115, Глава §6 Инструменты интеграции — Инструменты сборки — Расширение Maven.
  13. ^ Гулати и Шарма 2017 , стр. 113–114, глава §6. Инструменты интеграции — инструменты сборки — расширение Gradle.
  14. ^ Jump up to: а б Гулати и Шарма 2017 , с. 121, Глава §7 Модель расширения JUnit 5.
  15. ^ Jump up to: а б с д и ж г час Гулати и Шарма 2017 , стр. 121–122, глава §7 Модель расширения JUnit 4.
  16. ^ Jump up to: а б с д Гулати и Шарма 2017 , стр. 122–124, Глава §7 Модель расширения JUnit 5 — Модель расширения JUnit 5.
  17. ^ Гулати и Шарма 2017 , стр. 124–126, глава §7 Модель расширения JUnit 5 — обратные вызовы жизненного цикла тестирования.
  18. ^ Гулати и Шарма 2017 , стр. 126–127, глава §7 Модель расширения JUnit 5 — постобработка тестового экземпляра.
  19. ^ Гулати и Шарма 2017 , с. 127, Глава §7 Модель расширения JUnit 5 — выполнение условного теста.
  20. ^ Гулати и Шарма 2017 , с. 129, Глава §7 Модель расширения JUnit 5 — обработка исключений.
  21. ^ Кент Бек . «Запах дорогой установки» . С2 Вики . Проверено 28 ноября 2011 г.
  22. ^ Jump up to: а б «Написание тестов» . junit.org . Проверено 4 февраля 2021 г.
  23. ^ Jump up to: а б Гулати и Шарма 2017 , с. 37-40, Глава §2. Понимание CoreJunit 5.
  24. ^ "блики: Xunit" . martinfowler.com . Проверено 7 марта 2022 г.
  25. ^ «Юнит» . mvnrepository.com . Проверено 29 октября 2021 г.
  26. ^ Кент Бек ; Эрих Гамма . «Кулинарная книга JUnit» . junit.sourceforge.net. Архивировано из оригинала 15 июня 2020 г. Проверено 21 мая 2011 г.
  27. ^ Чарльз А. Шарп (август 2007 г.). «Миграция с JUnit 3 на JUnit 4: только хорошие новости» . Объектные вычисления, Inc. Проверено 4 февраля 2021 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: c65d3b332c0c4c05776d21fbcb10bc2e__1716754860
URL1:https://arc.ask3.ru/arc/aa/c6/2e/c65d3b332c0c4c05776d21fbcb10bc2e.html
Заголовок, (Title) документа по адресу, URL1:
JUnit - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)