Рубрики
Без рубрики

Структура Спока: Тест Java com mais produtividade

Превратите практика написания тестов на задачу более приятной. С тегами java, groovy, test, spockframework.

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

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

Счастливого пути : в случае, когда клиент использует приложение согласно спецификации проекта. Путь несчастной : возможности использования неправильных приложения клиентом (исключений).

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

Рассмотрим Спок через следующие характеристики:

  • Читаемость и организация тестирования
  • Универсальность параметризации тестов
  • Сообщить сбоев
  • Тестирование взаимодействия между объектами: ” Mocking ” и ” Stubbing
  • Работа с исключениями

Читаемость и организация тестирования

Практически весь тест, который мы пишем (за некоторыми исключениями) следующие участков :

  1. Настройки :, где мы инициализируем данные, которые будут использоваться в тесте.
  2. Выполнения :, где объектом тестирования будет работать.
  3. Проверки :, где оцениваем результаты, полученные на этапе выполнения.

Мы будем иллюстрировать эти этапы написания сценария, который проверяет возможности фиктивной регистрации пользователя JUnit 5 :

Хотя эти фазы присутствуют в большинстве тестов, не все библиотеки dispoẽm механизмов, чтобы оставить это в явной форме; в случае, если JUnit правило, использовать комментарии, чтобы обозначить границы каждого этапа.

Перепишите эту же ситуацию с Спок тест хорошо выглядит более четким и организованным, благодаря язык Groovy (основание Спок), что позволяет писать методы декларативной форме и держать тело тестирования более простой и лаконичный. Спок накладывает разделение фаз на стиле BDD использованием блоков : ” given “, ” when ” и ” then “.

На этапе проверки также становится более простым, так как использует те же операторы сравнения Java (удаляя необходимость знать методы ” assertion “):

Dice : существует также oblako ” and “, который может быть использован для того, чтобы оставить спецификация испытывать более понятно:

Зачастую нам нужно запустить тест с разными данными, чтобы убедиться, что все возможные сценарии в настоящее время проверяются.

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

В приведенном ниже примере мы используем ” Data Tables “, чтобы обеспечить ввод данных в метод испытания. В первой строке таблицы ( header ) объявляет имя переменных, которые будут использоваться в тесте, а остальные строки соответствуют значения этих переменных. Для каждой строки, метод тестирования будет работать один раз.

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

Спок использует понятие ” Data Driven Testing “, который обеспечивает несколько способов gerardo входных данных, что дает больше гибкости при программист при написании тестов:

В тесте ниже вставляем сбой целенаправленно в таблице блока “where” (строка 9):

Совет : предпочитаю использовать блок”, expect ” при реализации и проверки могут быть описаны в одной фазе.

При выполнении теста у нас будет следующий вывод в терминале:

С Спок, это легко определить, что произошел сбой на второй взаимодействия, но мы можем оставить эту информацию еще более явным с помощью аннотации ” @Разворачивает “:

Обратите внимание, что мы разметки на имя метода, используя символ “#” и имя переменных, используемых в тесте. Выполнив тест еще раз, мы будем иметь следующий результат:

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

Mocking

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

Nesse tipo de este (também conhecido com ” Тесты взаимодействия ” ou ” Тест на сотрудничество “) мы используем метод ” Mock ” (подражать), чтобы мы могли анализировать взаимодействия между объектами испытаний.

Создание Мокс очень простая и может быть выполнена двумя способами:

Или, используя синтаксис Java:

Давайте посмотрим, использование ” Mock ” более подробно в приведенном ниже примере (строки 14, 15):

Отличается от предыдущих примеров, в которых мы проверили состояние объекта испытания (ex: user.getName() ); наш интерес сейчас-это узнать, если после фазы реализации (” when “) – объект ” Publisher “провел взаимодействия, необходимые с ее сотрудников” Subscriber “.

Анализ взаимодействия осуществляется путем введения ограничений, а именно, в приведенном выше примере мы надеемся, что цель ” Subscriber “, вызывается через метод ” receive “, получают именно в качестве аргумента слово ” hello ” и это происходит только один раз.

Эти ограничения, которые организованы в Спок следующим образом:

  1. ограничение по мощности
  2. ограничение цели
  3. ограничение метода
  4. ограничение аргумент

Примечание: все варианты ограничения могут быть замечены в документации Спок, .

Stubbing

Как мы можем проверить объект самостоятельно когда он зависит от результата, возвращаемого другие объекты, которые сотрудничают с ним?

Это нужно, управления объектами совместной работы и определить, как они должны вести себя в процессе взаимодействия с объектом испытаний.

Мы называем этот метод ” Заглушки “, где мы заменяем реальный объект, объект, который будет работать с записи, которые мы хотим использовать в наших тестах.

Мы изменили наш тестовый пример, который использует ” Stubbing “, чтобы установить результат на метод ” receive “интерфейс” Subscriber ” (строка 22). Таким образом, мы можем проверить не только взаимодействие, но также ожидаемый доход:

Взаимодействие с ” Заглушки “отличаются мало по сравнению взаимодействия, как” Мокс “, как показано ниже:

Еще раз, всех вариантов взаимодействия может рассматриваться в документации Спок, , особенно часть, которая имеет дело с объединения “ Mocking ” и “ Stubbing .

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

Как правило, использование исключений, тесты возникают из двух способов:

1 – Валидор для исправления ошибки ума (” Условие исключения “).

2 – Имитировать исключение как побочный эффект (с помощью ” Заглушки “).

Еще как положительные Спок стоит перечислить:

  • Спок предоставляются ” Web-Console “, где мы можем испытать его функционирования.
  • Пример проекта показывает, как настроить: Муравей, Gradle e Maven.
  • Отличный документации, основанном на понятиях Agile и BDD .
  • Framework “Макет” Спок является комплексной, то есть, не нужно импортировать другие библиотеки (хотя вы можете также использовать их в сочетании с Спок).
  • Интеграция с Spring .

Не все цветы. Важно отметить, что, по сравнению, JUnit 5 зарабатывает в следующих пунктах:

  • 100% реализована в Java.
  • Улучшена совместимость с последними версиями JDK.
  • Улучшенная интеграция с Ide.

Во всяком случае, при условии, что я использовала Спок в первый раз не бросил; не только прирост производительности, но также и по тому, как тесты проходят работать (не факт), как в документации приложения.

Характеристика:

  • Почему я предпочитаю Spock, а не JUnit от Bouke Nijhuis ( YouTube )
  • Спок против Джunit 5 – Clash of the Titans by Marcin Zajaczkowski ( YouTube , Слайды|/) Тестовые шаблоны xUnit – Рефакторинг тестового кода от Gerard Meszaros (
  • Сайт , Книга )

Оригинал: “https://dev.to/mariorez/spock-framework-teste-java-com-mais-produtividade-4ibn”