Какой фреймворк предназначен для написания юнит тестов java

Обновлено: 06.07.2024

На протяжении десятилетий 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, являются их собственными.

1. JBehave

2. JUnit

  • Наборы тестов;
  • Использование общих наборов объектов;
  • Классы JUnit;
  • Test Runners.
  • Наличие на вашем компьютере ​​последней версии JDK.
  • (Необязательно) Разархивируйте $ JUNIT_HOME / src. jar файл.
  • Наличие навыков и опыта разработки приложений на объектно-ориентированном языке, желательно на Java.
  • Загрузите новую версию JUnit и настройте фреймворк.
  • Поскольку JUnit поддерживает функции Java 8, его можно использовать как для интеграционных, так и для модульных тестов.
  • Фреймворк позволяет легко обнаружить ошибки на ранней стадии, в результате чего получается исправный и надежный код.
  • Программисты, работающие с JUnit, находят его чрезвычайно полезным. С ним легче читать код и проверять наличие уязвимостей.
  • JUnit позволяет создавать код, свободный от ошибок и с лучшей удобочитаемостью.
  • Совместим с практически всеми основными IDE, такими как Eclipse, NetBeans, Maven, Ant и IntelliJ IDEA. Таким образом, вы можете легко написать и запустить модульный тест напрямую из этих IDE.
  • Используя обновленную версию JUnit (версия 5), можно легко определить исключение (exemption).
  • Фреймворк модульного тестирования можно использовать с Java 5 или другими версиями.

3. Serenity

  • Проект с открытым исходным кодом;
  • Полные отчеты о результатах тестирования и реализации;
  • Отчет в бизнес-формате для каждого теста.
  • JDK 5 или более поздняя версия.
  • Maven 3.0 или более поздняя версия.
  • IDE (обычно это Eclipse).
  • Фреймворк помогает тестировщику создавать тестовые примеры для служб REST.
  • Поддерживает баланс между описанием и пониманием тестового примера, а также подходом к его реализации.
  • Пользователям не нужно тратить дополнительное время на поддержку или создание собственной автоматизированной инфраструктуры.
  • Serenity можно интегрировать с различными фреймворками разработки, такими как Spring, и фреймворками тестирования, такими как Selenium, JBehave, а также с инструментами управления проектами, такими как JIRA.

4. TestNG

  • Поддерживает тестирование зависимых методов;
  • Гибкая конфигурация теста;
  • Поддерживает стойкую (sturdy) модель исполнения;
  • Установлен в BeanShell для дополнительной гибкости.
  • Последняя версия JDK;
  • Последняя версия Eclipse;
  • Понимание и практический опыт языка программирования Java или другого объектно-ориентированного языка программирования.
  • Позволяет создавать и запускать параллельное тестирование нескольких фрагментов кода.
  • При реализации тестового примера вы можете создать отчет в формате HTML.
  • Тесты можно легко организовать и сгруппировать в соответствии с приоритетами. Выполнить тесты намного проще, просто поместив фреймворк для выполнения внешнего тестирования или тестирования базы данных.
  • Приоритеты могут быть легко установлены путем параметризации данных и использования аннотаций.

5. Selenide

  • Не требует сложной настройки;
  • Не требует написания большого количество кода;
  • Экономит массу времени;
  • Идеальная конфигурация для CI Tool, такого как Jenkins.
  • JDK 5 или более новая версия;
  • Maven 3.0 или другие версии;
  • Инструмент интегрированной среды разработки (IDE). Чаще всего все разработчики предпочитают Eclipse, поскольку с комбинацией Eclipse и Maven проще работать.
  • Selenide делает ваши тесты точными и стабильными, решая (почти) все проблемы с Ajax/timing.
  • Сокращение процесса написания тестовых примеров.
  • Поддержка тестов приложений, разработанных с использованием AngularJS.
  • Сокращает количество команд, которые ранее использовались другими инструментами Selenium.

6. Gauge

7. Geb

8. Spock

  • Де-факто это расширенная версия Java-фреймворка JUnit;
  • Поддержка mock-объектов;
  • Тесты можно писать на любом языке.
  • Последняя версия JDK;
  • Обновленная версия Eclipse;
  • Знание языка программирования Java.
  • Потрясающая читаемость, обеспечивающая совместимость с предложениями на простом английском языке по сравнению с другими платформами тестирования автоматизации Java.
  • Stubbing и Mocking со Spock стали намного проще и безболезненнее, чем когда-либо. К тому же, они встроены во фреймворк.
  • Более четкая и короткая параметризация.
  • Поддерживает окружающий контекст, что упрощает обнаружение причины сбоя.
  • Упрощенный и коммуникативный предметно-ориентированный язык (DSL).
  • Он написан на Groovy, поэтому вы должны иметь базовые знания Groovy.
  • Вам может показаться, что фреймворк Spock немного неудобен, но как только вы ознакомитесь с ним, вы не будете думать о переходе на другие тестовые фреймворки Java.

10. JWebUnit

  • Java API верхнего уровня для навигации по веб-приложению.
  • Фреймворк на основе Java с открытым исходным кодом.
  • Вам необходимо установить Maven.
  • Текущая стабильная версия JWebUnit — 3.3. Требуется Java 1.7.
  • Добавьте необходимый вам плагин: HtmlUnit для более быстрых тестов и отличной поддержки Javascript и Webdriver: BETA quality.
  • Для управления зависимостями в Eclipse при использовании Maven 2 используйте плагин m2e.
  • Используется для тестирования экранной навигации.
  • Предоставляет API высшего уровня для навигации по веб-приложениям.
  • Простая навигация с легкодоступными утверждениями позволяет создавать тесты быстрее, чем при использовании JUnit или HtmlUnit.
  • Если кто-то желает переключиться с HtmlUnit на другие типы плагинов, такие как Selenium, нет необходимости переписывать тесты.

Заключение

Разработчикам жизненно необходимо быть экспертами в области тестирования программного обеспечения и прекрасно разбираться в тестировании. Это то, что отличает опытных Java-разработчиков от новичков. Чтобы приблизиться к совершенству, вам настоятельно рекомендуется изучить 10 лучших фреймворков для тестирования Java, упомянутых выше. Они упростят для вас тестирование приложений. Помимо ознакомления с фреймворками для тестирования Java, вы также должны выбрать правильную платформу автоматизации тестирования

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

  • Когда я должен использовать инструмент 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 вам в помощь.

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

Тесты бывают нескольких видов:

  • юнит тесты (как правило тестируются отдельные методы или сервисы);
  • интеграционные тесты (тестируются взаимодействия нескольких участков системы)

Сегодня нас интересуют юнит тесты. Де-факто фреймворком для написания юнит тестов на языке Java является JUnit.

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


создание нового Maven проекта в среде intellij idea

Выбираем Maven и нажимаем Next. Далее заполняем groupId и artifactId значениями com.javamaster и junit_example соответственно.

Перед тестами я написал небольшой класс UsersService, который и выступит в качестве кода, который мы попытаемся покрыть тестами.

Теперь приступим к написанию самих тестов.


структура проекта

Теперь сам код теста:

Далее идут сами методы, которые тестируют функциональность класса UsersService. Из названий методов видно какой функционал они тестируют.

Для запуска тестов нужно нажать правой кнопкой на классе и выбрать Run. Или запустить тест, нажав на зеленую кнопку в intellij idea. В eclipse механизм запуска должен быть похожим. Причем запускать можно как весь класс тестов, так и каждый тест по отдельности.

В результате успешного запуска и отработки тестов Вы должны увидеть в консоли примерно такой результат:


результат успешно отработанных тестов

Возьмем для примера метод isBirthDay. Его функционал и назначение понятны: метод должен возвращать есть ли у пользователя день рождение в зависимости от даты рождения и входной даты. Почему я использовал входную дату вместо использования например текущей даты? Дело в том, что я не знаю когда будут запускаться данные тесты. И может быть такой вариант, что запуск тестов в определенную дату даст нам неверный результат их работы.

Функционал isBirthDay покрывают два теста:

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

Допустим, Вас попросили изменить реализацию метода isBirthDay. Возможно, пример примитивный и простой, но в целях учебы вполне себе сойдет.

Вы что-то там делали и написали вот такое решение:

Можете думать, что данный пример я выдумал, но в свое время, у нас был метод в приложении, который определял есть ли день рождения у пользователя. Причем, отрабатывал шедулер, который выбирал из базы данных пользователей, брал дату их рождения и потом отсылал поздравление на почту. Проблема была в том, что пользователей было примерно пол миллиона, а день рождения у них хранился не в очень удобном для java формате. Код поздравлений с днем рождения отрабатывал очень медленно. Программист, который его написал явно был не очень опытным: он брал из базы дату рождения пользователя в виде строки, потом вынимал из строки день и месяц, и сравнивал их с текущим днем и месяцем.

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


результат запуска с падением тестов

У Вас часто будет возникать вопрос: сколько нужно тестов, чтобы убедиться в правильности написанного кода? На это нет конкретного ответа. Старайтесь писать столько тестов, сколько сами считаете нужным. На реальных проектах Вы будете писать столько, на сколько будет хватать времени. Я советую покрывать тестами некоторые подозрительные и опасные места в коде. Особено тщательно нужно покрывать места, где идет работа кода с финансами, округлениями. Как показывает опыт, именно они наиболее часто дают ошибки.

Это все, что касается юнит тестирования и, в частности, написания JUnit тестов на Java.

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