Какие тестовые фреймворки xunit реализованные на java существуют

Обновлено: 02.07.2024

Данный гист содержит информацию об основных аспектах использования фреймворка для юнит тестирования JUnit 4.

@Test - любые тесты должны быть помечены этой аннотацией.

  • С помощью данной аннотации не нужно наследоваться от TestCase класса.
  • Параметры:
    • expected - указывает тип исключения, которое должно быть брошено из данного теста. Например @Test(expected = IndexOutOfBoundsException.class) .
    • timeout - указывает время в миллисекундах, после истечения которого тест помечается как непройденный. Например @Test(timeout = 100) .

    @Before - аннотация позволяет выполнять логику перед выполнением каждого теста.

    @After - аннотация позволяет выполнять логику после выполнения каждого теста.

    @BeforeClass - аннотация позволяет выполнять логику перед выполнением всех тестов в данном классе.

    @AfterClass - аннотация позволяет выполнять логику после выполнения всех тестов в данном классе.

    @Ignore - тест, помеченный данной аннотацией, будет пропускаться.

    • Параметры:
      • Параметром служит строка - причина пропуска теста.

      @RunWith - если класс содержит данную аннотацию, JUnit будет запускать тесты в классе, который указан в параметрах этой аннотации, вместо стандартного раннера, встроенного в JUnit.

      • Стандартный класс раннера - BlockJUnit4ClassRunner , который заменяет старый класс - JUnit4ClassRunner .
      • Разновидность раннеров:
        • Suite - позволяет вручную составить набор из тестов разных классов.
        • Parameterized - реализует параметризованные тесты.
        • Categories - включает подвид тестов, принадлежащих той или иной категории.
        • Enclosed - запуская класс с этой аннотацией, можно будет запускать тесты из внутренних классов.

        @Suite.SuiteClasses - с помощью данной аннотации, тестовый класс совмещает в себе другие тестовые классы, указанные в параметрах.

        @Parameterized.Parameters - статический метод, содержащий данную аннотацию создает и возвращает коллекцию из массивов элементов, которые являются параметрами для тестового метода.

        • Также можно повесить аннотацию @Parameter на public поле, чтобы сразу инжектить значения, вместо того, чтобы передавать их через конструктор. Параметр value - указывает значение по дефолту для поля, на котором висит эта аннотация.
        • Параметры:
          • name - изменяет имя параметризованного теста. Допускается использование таких плейсхолдоров, как , , и так далее.

          @Category - разновидность раннера, который запускает только те тестовые классы и методы, которые аннотированы @IncludeCategory аннотацией или ее расширениями.

          • Категориями могут быть как классы, так и интерфейсы.
          • @IncludeCategory - включает указанную в параметрах категорию.
          • @ExcludeCategory - исключает указанную в параметрах категорию.
          • Пример:

          @Rule - с помощью этой аннотации можно создавать специальные объекты, которые используются в тестовых методах. Тестеры могут реиспользовать или расширять эти объекты или создавать свои.

          @FixMethodOrder - класс, помеченный данной аннотацией, сможет запускать тесты в некотором установленном порядке, так как изначально их порядок устанавливается через рефлексию.

          • Параметры:
            • Параметром является тип сортировки тестовых методов. Возможные типы: DEFAULT, JVM, NAME_ASCENDING.

            Assert — это конструкция, позволяющая проверять предположения о значениях произвольных данных в произвольном месте программы.

            Assume - это конструкция, позволяющая проверять корректность теста перед его выполнением.

            • По дефолту JUnit воспринимает тесты, которые не прошли какую-то assume проверку, как проигнорированные.
            • Упавший на assume проверке метод, помеченный аннотацией @Before пометит все тестовые методы в данном классе как проигнорированные.
            • Пример:

            JUnit Asserts. JUnit предоставляет перегруженные ассерты для наиболее распространенных действий:

            • assertArrayEquals - проверяет два массива на равенство.
            • assertEquals - проверяет два примитива/объекта на равенство.
            • assertFalse - проверяет условие на ложность.
            • assertTrue - проверяет условие на истинность.
            • assertNotNull - проверяет, что объект не null.
            • assertNull - проверяет, что объект null.
            • assertNotSame - проверяет, что два объекта не ссылаются на одну область памяти.
            • assertSame - проверяет, что два объекта ссылаются на одну область памяти.
            • assertThat - специальный ассерт, исполользующий матчеры.

            assertThat - механизм ассертов, основанный на JMock 1. Преимущество нового метода в том, что он более читаем за счет матчеров, которые можно расширять.

            • Список матчеров из Hamcrest фреймворка, которые заменяют стандартные JUnit-овские ассерты:
              • anything - всегда удовлетворяет условию.
              • describedAs - пустышка, чтобы добавлять описание ошибки.
              • is - пустышка, чтобы улучшить читемость.
              • allOf - аналогия оператору "и".
              • anyOf - аналогия оператору "или".
              • not - аналогию оператору отрицания.
              • equalTo - проверка на равенство объектов, используя Object.equals .
              • hasToString - проверяет на равенство с помощью Object.toString .
              • instanceOf, isCompatibleType - проверка совпадения типов.
              • notNullValue, nullValue - проверка на null.
              • sameInstance - проверка инстансов объектов.
              • hasProperty - проверка JavaBeans пропертей.
              • array - позволяет устанавливать несколько матчеров.
              • hasEntry, hasKey, hasValue - проверка мапы на содержания ключа, значения или кортежа.
              • hasItem, hasItems - проверка коллекции на содержание элемента/ов.
              • hasItemInArray - проверка массива на содержание элемента.
              • closeTo - проверка чисел с плавающей запятой на близость по значению к заданному числу.
              • greaterThan, greaterThanOrEqualTo, lessThan, lessThanOrEqualTo - аналогия операторам неравенства.
              • equalToIgnoringCase - проверка на равенство строке, игнорируя регистр букв.
              • equalToIgnoringWhiteSpace - проверка равенство строке, игнорируя пробелы.
              • containsString, endsWith, startsWith - проверка на содержание вхождения строки.

              Юнит-тестирование или модульное тестирование - тип тестирования, при котором проверяется корректность отдельных модулей программы. Юнит-тесты пишутся для каждой нетривиальной функциональности.

              • Целью юнит-тестирования является изолированное тестирование отдельных частей программы, чтобы показать, что по отдельности эти части являются работоспособными.

              Интеграционное тестирование - тип тестирования, при котором отдельные программные модули объединяются и тестируются в группе. Обычно интеграционное тестирования проводится после модульного.

              • Целью интеграционного тестирования является проверка связей между компонентами, а также взаимодействия с различными частями системы.

              Системное тестирование - тип тестирования, при котором проверяются как функциональные, так и нефункциональные требования к системе в целом, используя окружение, максимально приближенное к тому, в котором она будет развернута.

              • Целью системного тестирования является выявление дефектов, связанных с использованием ресурсов системы, результатами ее работы, удобством использования и т.д.

              JUnit - фреймворк для юнит-тестирования Java кода.

              • Он является одним из семества xUnit фреймворков для различных языков программирования.
              • JUnit пропогандирует TDD.

              TDD (Test-Driven Development) - техника разработки, которая основывается на идее "сначала тестирование, потом кодинг". Подразумевается, что в первую очередь нужно написать тест для будущей функциональности, а затем саму функциональность. Такой подход увеличивает стабильность написанного кода и сводит к минимуму время, потраченное на отладку программы.

              На протяжении десятилетий Java была наиболее предпочтительным языком программирования для разработки серверного уровня приложения. Хотя JUnit и разработчики помогали им в автоматизированном модульном тестировании, со временем и развитием тестирования, когда автоматизированное тестирование в настоящее время находится на подъеме, было разработано много сред с открытым исходным кодом, которые основаны на Java и сильно отличаются от JUnit с точки зрения валидации и бизнес-логики. Здесь я буду говорить о 5 лучших фреймворках Java-тестирования 2019 года для автоматизации тестирования с Selenium WebDriver и Java. Я также выделю то, что уникально в этих лучших тестовых средах Java.

              JUnit

              Кент Бек и Эрих Гамма разработчик JUnit, который является экземпляром xUnit. Основная цель заключалась в том, чтобы позволить разработчикам Java создавать сценарии и выполнять повторяющиеся тесты. Обычно используется для тестирования маленьких кусков кода. Вы также можете выполнить автоматическое тестирование веб-сайта, интегрировав JUnit с Selenium WebDriver для автоматизации тестирования Java. Каждый раз, когда добавляется какой-либо новый фрагмент кода, вам необходимо будет повторно выполнить все контрольные примеры и убедиться в отсутствии поломок.

              Каковы предпосылки?

              • Установите последнюю версию JDK на вашей рабочей станции.
              • Загрузите последнюю версию JUnit и настройте среду.
              • Хорошее знание разработки приложений на объектно-ориентированном языке программирования, особенно на Java.

              Преимущества и недостатки использования JUnit?

              У JUnit есть несколько преимуществ.

              • Разработчики, которые работают в среде, управляемой тестами, считают ее очень полезной, поскольку они вынуждены читать код и обнаруживать наличие аномалий.
              • Ошибки обнаруживаются рано, в результате чего более надежный код.
              • Разработка более читабельного и безошибочного кода действует как средство повышения уверенности.
              • В последней версии JUnit (версия 4) исключения легко идентифицируются. Даже вы можете выполнить тестовые случаи, написанные в старой версии JUnit.
              • Вы также можете использовать его с Java 5 или версиями выше.
              • Фреймворк не может выполнять тесты зависимостей. Вот где нам нужен TestNG.

              Единственный недостаток JUnit это

              • Фреймворк не может выполнять тесты зависимостей. Вот где нам нужен TestNG.

              Является ли JUnit лучшей тестовой средой Java для вас?

              И JUnit, и TestNG выполняют одинаковую работу. И их возможности почти одинаковы, за исключением того, что тесты зависимостей не выполняются с использованием JUnit, а процедура реализации параметризованного теста отличается в обеих платформах. Кроме того, поскольку JUnit используется в течение длительного времени, улучшена поддержка сообщества, и он был определен как стандарт для модульного тестирования с использованием Selenium WebDriver для приложений на основе Java. Несмотря на то, что у TestNG мало пользователей, сообщество все еще довольно большое и растет с каждым днем. Таким образом, мы можем сделать вывод, что выбор между TestNG или JUnit для тестовой среды Java полностью зависит от характера и требований приложения.

              Если вы хотите начать работу с JUnit в качестве среды тестирования Java, приведите пошаговый процесс автоматического тестирования с JUnit & Selenium для совместимости браузера.

              JBehave

              Каковы предпосылки?

              Преимущества и недостатки JBehave

              Как и все другие среды тестирования BDD, JBehave также имеет много преимуществ.

              • Служит наиболее важной цели управляемой поведением разработки, обеспечивая лучшую координацию между различными командами разработчиков, которые работают над различными проектами со сходными спецификациями.
              • Руководители проектов и заинтересованные стороны получают более четкое представление о результатах работы команды разработчиков и группы обеспечения качества, поскольку спецификации имеют схожий формат.
              • Продукты имеют лучшие характеристики, так как JBehave отличается продуманностью и продуманностью.
              • JBehave использует полуформальный язык, а также имеет словарь предметной области, который помогает поддерживать согласованное поведение в структуре команды.

              Ну, у JBehave есть только один недостаток, как и у любого другого инструмента тестирования BDD.

              • Успех инструмента тестирования BDD зависит в основном от взаимодействия между различными участниками проекта, заинтересованными сторонами, разработчиками, тестировщиками, а также руководством организации. Отсутствие связи может привести к возникновению вопросов и сомнений без ответа, что в конечном итоге может привести к появлению приложения с ошибками или приложения, не удовлетворяющего требованиям бизнеса, в результате чего все стороны обвиняют друг друга.

              Является ли JBehave лучшей тестовой средой Java для вас?

              JBehave работает так же, как Serenity. Однако, если вы хотите повысить эффективность своих автоматических приемочных тестов, идеально использовать Serenity вместе с JBehave, чтобы повысить качество тестирования. Это связано с тем, что основная концепция Serenity основана на разработке BDD, а также позволяет пользователям создавать мощный и богатый отчет о тестировании. Мы обсудим это подробнее в следующем разделе.

              безмятежность

              Каковы предварительные условия для установки Serenity?

              Поскольку платформа основана на Java, вам, очевидно, потребуются знания и опыт работы с Java или любым другим объектно-ориентированным языком программирования. Кроме того, на вашей рабочей станции вам понадобится

              Тестовые рамки Java

              TestNG

              Седрик Беуст создал TestNG, который представляет собой фреймворк для автоматизации тестирования с открытым исходным кодом на основе Java, вдохновленный JUnit. Тем не менее, это гораздо мощнее. NG означает следующее поколение в TestNG. Фреймворк предназначен для лучшей работы во время интеграции. Фреймворк помогает разработчикам с такими функциями, как секвенирование, группирование и параметризация, что делает новые тестовые сценарии более гибкими и устраняет недостатки ранее используемых фреймворков.

              Необходимые условия для установки TestNG

              Для установки TestNG вам понадобится

              • Последняя версия JDK установлена ​​в вашей системе.
              • Последняя версия Eclipse
              • Знание и практический опыт Java или любого другого объектно-ориентированного языка программирования

              Преимущества и недостатки TestNG

              Помимо преодоления недостатков старых платформ, есть несколько преимуществ TestNG.

              • Инфраструктура позволяет запускать параллельные тесты для нескольких фрагментов кода.
              • Во время выполнения тестового примера вы можете создать отчет в формате HTML.
              • Тестовые случаи могут быть сгруппированы и расположены в соответствии с приоритетами. Выполнить тесты намного проще, просто попросив инфраструктуру запустить тесты базы данных или интерфейсные тесты или что угодно.
              • Вы можете параметризировать данные и использовать аннотации, чтобы легко установить приоритеты.
              • Это зависит от вашего требования. Возможно, вы не захотите использовать TestNG, если ваш проект не требует приоритизации тестового набора. Кроме того, настройка TestNG требует немного времени.

              Хотя JUnit выполняет все те же функции, что и TestNG, он имеет определенные ограничения. JUnit идеально подходит, когда тестирование проводится изолированно. Но когда есть зависимости, вы не будете иметь никакого контроля над тем, какой тест выполняется первым. TestNG помогает вам, позволяя вам запускать тесты в любом порядке. Кроме того, это также помогает в параметризованном тестировании. Хотя эта функция уже присутствует в JUnit 4.5, TestNG гораздо эффективнее. Если ваш проект сложен и вам может потребоваться более ста тестовых случаев, то лучше взять некоторое время и настроить TestNG вместо зависимости от JUnit.

              Если вы новичок в TestNG, то вот полное руководство по запуску вашего первого сценария автоматизации TestNG для выполнения автоматического межбраузерного тестирования с использованием Selenium WebDriver с Java.

              селенида

              Каковы предпосылки для использования селенида?

              Установка Selenide настолько проста, насколько это возможно. Если вы используете Maven, вам нужно будет добавить следующие строки в ваш файл pom.xml.

              Если вы используете Ivy, в файле ivy.xml вам нужно будет добавить

              И вот так, фреймворк готов для вас, чтобы начать тестирование.

              Преимущества и недостатки селенида?

              На внешнем уровне приложения, где Java используется на стороне сервера, наиболее распространенной проблемой, с которой сталкивается тестер, являются тайм-ауты. Тестовые случаи, которые вы написали, в настоящее время могут работать нормально, но через несколько дней, возможно, какой-то Ajax-запрос займет больше времени, чем сейчас, или Javascript будет работать медленнее. Кроме того, ваша система может одновременно запустить другой процесс, что приведет к сбою тестового примера. Что еще более печально, вы можете потратить дни, чтобы выяснить источник этих проблем. Selenide помогает вам

              • Краткая процедура написания тестовых случаев, которая устраняет проблемы с таймаутом.
              • Поддерживает тестирование приложений, разработанных с использованием AngularJS
              • Сократили большинство команд, которые использовались традиционными инструментами Selenium.

              До сих пор мы не обнаружили каких-либо заметных недостатков использования селенида. Сообщите нам, если вы обнаружили какие-либо ограничения, которые могут повлиять на вашу работу.

              Для тестирования пользовательского интерфейса не существует лучшей среды на основе Java, кроме Selenium WebDriver, родительской платформы Selenide. Очевидно, что WebDriver не может решить проблемы, вызванные Ajax Timeout или медленным запуском JavaScript или любого динамического содержимого, для загрузки которого требуется время. Чтобы преодолеть проблемы, мы ранее использовали методы «wait_until» или «sleep» в наших тестовых случаях. С Selenide нам больше не нужно думать об этих проблемах. Просто сосредоточьтесь на бизнес-логике, и контрольные примеры будут отлично работать в своих целях.

              Если вы планируете выбрать Selenide в качестве среды тестирования Java для тестирования автоматизации, то вот руководство, которое поможет вам запустить тесты автоматизации Selenium с использованием Selenide, IntelliJ и Maven.

              Тестовые рамки Java

              Мнения, высказанные участниками Java Code Geeks, являются их собственными.

              Содержание

              xUnit архитектура

              Все фреймворки xUnit имеют следующую базовую компонентную архитектуру с некоторыми различными деталями реализации.

              Тестовый бегун

              Средство выполнения тестов - это исполняемая программа, которая запускает тесты, реализованные с использованием платформы xUnit, и сообщает результаты тестирования.

              Прецедент

              Тест является наиболее элементарным классом. Отсюда наследуются все модульные тесты.

              Испытательные приспособления

              Приспособление для тестирования (также известное как контекст тестирования) - это набор предварительных условий или состояния, необходимых для запуска теста. Разработчик должен установить заведомо исправное состояние перед тестами и вернуться в исходное состояние после тестов.

              Наборы тестов

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

              Выполнение теста

              Выполнение отдельного модульного теста происходит следующим образом:

              Методы setup () и teardown () служат для инициализации и очистки тестовых приспособлений.

              Форматировщик результатов теста

              Средство выполнения тестов выдает результаты в одном или нескольких форматах вывода. В дополнение к простому, удобочитаемому формату часто существует средство форматирования результатов тестирования, которое выдает вывод XML . Формат результатов теста XML возник в JUnit, но также используется некоторыми другими средами тестирования xUnit , например инструментами сборки, такими как Jenkins и Atlassian Bamboo .

              Утверждения

              Утверждение является функция или макрос , который проверяет поведение (или состояние) блока под испытанием. Обычно утверждение выражает логическое условие , которое истинно для результатов, ожидаемых в правильно работающей тестируемой системе (SUT). Ошибка утверждения обычно вызывает исключение , прерывая выполнение текущего теста.

              Фреймворки xUnit

              Существует множество фреймворков xUnit для различных языков программирования и платформ разработки.

              Я считаю, что разработка ПО — нечто большее, чем работа. Я вижу себя ремесленником, который каждый день пытается стать лучше. Самый «простой» путь для этого — найти несколько хороших инструментов и ответить на следующие вопросы:

              • Когда я должен использовать инструмент X?
              • Как я должен использовать инструмент X?

              Автоматизированное тестирование — очень важная часть разработки ПО, но в блогах программистов немного постов про используемые инструменты. Эта же статья позволит вам заглянуть в мой «ящик с инструментами». Я расскажу о 12-ти библиотеках и фреймворках, которые я использую для написания unit- и интеграционных тестов, а также предоставлю ссылки на страницы, которые помогут вам понять, как их использовать.

              Заглянем в мой ящик с инструментами

              Перед тем, как вы сможете использовать описанные далее инструменты, вы должны настроить сборку, которая автоматически запускает интеграционные и unit-тесты. У меня есть 2 заметки по этой теме:

                описывает, как мы можем настроить Maven-сборку с интеграционными и unit-тестами в разных директориях. описывает то же самое для Gradle.

              Теперь вы готовы взглянуть на мои инструменты поближе. Я разделил их на категории, чтобы вам было проще ориентироваться.

              Итак, вот 12 инструментов, которые я использую при интеграционном и unit-тестировании.

              Запуск тестов

              JUnit — это фреймворк, который я использую как для unit-, так и для интеграционных тестов. Мне он очень нравится, т.к. он самый популярный, поэтому имеет множество расширений. Также, если у вас возникнут проблемы — найти решение будет несложно.

              NestedRunner — расширение для JUnit, которое позволяет запускать тестовые методы из вложенных классов. Мне нравится NestedRunner по ряду причин:

              • можно заменить длинные имена методов на иерархию классов в стиле BDD;
              • можно избавиться от дублирующего кода путём перемещения его в установочные методы в нужных вложенных классах;
              • можно объявить константы во вложенных классах и связать их с тестами, которым эти константы нужны.

              junit-davaprovider — расширение для JUnit, позволяющее писать параметризованные тесты с использованием TestNG в качестве провайдера данных. Это большое улучшение по сравнению с обычным способом написания параметризованных тестов, который, прямо скажем, не очень.

              Дополнительно:

                описывает, как писать тесты с JUnit 4.X. рассказывает о решении проблем, связанных с написанием «чистых» тестов. . .

              Макеты, заглушки, подмены

              Mockito — самый популярный фреймворк с поддержкой макетирования для unit-тестов. Мне он нравится из-за простого API, множества полезных возможностей и превосходной документации.

              Greenmail — сервер электронной почты, который поддерживает SMTP, POP3 и IMAP с поддержкой SSL-соединения. Он мне нравится из-за простоты использования. Когда я искал отладочный сервер электронной почты, пересмотрев несколько альтернатив, остановился на Greenmail, т.к. он работал именно так, как мне требовалось.

              MockFtpServer — библиотека, которая предоставляет две разные реализации FTP-сервера («заглушка» и «обманка»), которые можно использовать для тестирования различных сценариев. Если вам нужно протестировать код, взаимодействующий с FTP-сервером, наш выбор — MockFtpServer.

              Дополнительно:

                — отличный пример справочной документации, которая действительно помогает. . . . Поможет решить, какая реализация FTP-сервера необходима для проведения того или иного теста.

              Утверждения

              Hamcrest предоставляет инструменты для написания утверждений (assertions) для unit- и интеграционнаых тестов. Я его использую вместе со Spring MVC Test Framework.

              Дополнительно:

                . рассказывает, как использовать Hamcrest для написания тестов, а также как расширить его возможности с помощью пользовательских модулей. . рассказывает, как создавать пользовательские утверждения в AssertJ. . Рассказывает, почему мы должны заменить стандартные утверждения JUnit собственными, которые используют верный предметно-ориентированный язык.

              Тестирование кода доступа к данным

              H2 — быстрая БД, полезна для написания интеграционных тестов, которые запускаются на локальной машине разработчика.

              DbUnit — расширение для JUnit, которое может быть использовано для инициализации БД в известное состояние перед выполнением каждого интеграционного теста и заполнения БД нужными данными. У DbUnit есть свои недостатки, но это очень полезный инструмент, позволяющий разделить тестовые данные и тестовый код.

              Дополнительно:

                описывает ключевые компоненты DbUnit, знание которых необходимо для написания тестов с использованием DbUnit. предоставляет пять правил написания лучших тестов для кода доступа к данным. поможет вам писать детерминированные тесты доступа к данным, которые проверяют нужную вещь, легкочитаемые и поддерживаемые.

              Тестирование Spring приложений

              Spring Test — швейцарский нож для написания автоматизированных тестов. Он предоставляет первоклассную поддержку написания unit- и интеграционных тестов для приложений, использующих Spring.

              Spring Test DbUnit — интегрирует DbUnit во фреймфорк String Test. Если вам нужно написать тесты доступа к данным для приложения, использующего Spring и реляционную БД, то Spring Test DbUnit вам в помощь.

              Читайте также: