Wednesday, February 12, 2014

Прикольный фреймворк для тестов Spock.

Недавно на проекте заюзали spock для юнит тестов. Ему, оказывается, уже много лет (целых 4 года!), а я узнал о нем только сейчас. Так обидно стало за бесцельно прожитые годы рядом с морально устаревшим JUnit'ом :).

Кто такой Спок?

Спок - коммандер и научный сотрудник звездолета "Энтерпрайз", родился в 2230 году по земному летоисчислению. Наполовину землянин, наполовину вулканец. Увлечение компютерами привело его в звездный флот, где он и сделал свою карьеру научного сотрудника.
Кому не хватило терпения посмотреть сериал, на википедии есть краткая биография Спока.
Не знаю, что сподвигло разработчиков назвать фреймворк для тестирования именем персонажа из Стартрека. Может двойственная натура героя (spock хорошо подходит как для тестирования Java так и Groovy кода), а может что еще.



Ближе к коду

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

Вот так выглядит первый тест. Можно нормально назвать тест, а ключевые слова when и then добавляют читабельности тесту.


Можно написать тест, используя data-driven подход. Имена колонок таблицы данных должны совпадать с именами переменных тестового метода:


Добавил строчку в таблицу данных и получил вот такую "колбасу":

Колбасу сразу же почистил - вынес значения колонки board в константы:

До этого момента тесты проходили, но я нашел ошибку в тесте и добавил еще одну проверку в expect

После чего тесты упали. Вот так отображаются фейлы тестов:

Поскольку тест упал на каждой строке данных, то вот 2й фейл:

Делаю репорты выполения читабельнее

Понравилась возможность выводить значения данных в имени тестового метода. Для этого есть аннотация @Unroll. Для примера я сделал следующий изврат.
Стал использовать мапу со значениями, а ключ принимаю как параметр теста:

Инициализацию мапы вынес в специальный метод setupSpec. setupSpec вызывается 1 раз перед всеми тестами. Нестатические поля надо помечать как @Shared, если их значения используются в тестах:

Ну и зафейленые методы выглядят теперь так:


Как подключить

1. Нужно добавить плагин. Использую maven-compiler-plugin, с поддержкой груви компиляции
2. Добавить зависимости на spock и на сам groovy:
3. Поскольку я использовал снапшотную версию spok, то добавить репозиторий:
После настройки плагина можно миксовать Groovy и Java код:

А если поставить spock плагин к идее, то будет вообще сказка


Ресурсы

1. Страничка фреймворка: https://code.google.com/p/spock/
2. Наш сайт с игрушками : codenjoy.com. Онлайн батлы : http://codenjoy.com/codenjoy-contest/
3. Репозиторий на гитхабе с кодом : https://github.com/szelenin/bomberman
4. Пример использования от разработчиков: https://github.com/spockframework/spock-example

2 comments:

  1. Anonymous7:42 AM

    VarangaOfficial - варанга казань - мы работаем только с официальными источниками, и предоставляем вниманию наших пользователей исключительно проверенные, не подвергающиеся сомнениям, факты. Воспользовавшись нашим сайтом, вы сможете узнать всеисчерпывающую информацию об этом лекарственном средстве. Лично увидеть данные о клиническом тестировании геля, прочитать отзывы реальных покупателей и врачей. Изучить инструкцию по использованию, прочесть особенности и методы работы мази, понять, в чем заключаются особенности работы крема Варанга, где нужно покупать оригинальный препарат и, как избежать покупки подделки. Мы очень тщательно и скурпулезно проверяем размещаемые данные. Предоставляем пользователям нашего ресурса сведения, которые были почерпнуты только из достоверных источников. Если вы нашли признаки грибка или же долго и безрезультатно пытаетесь избавиться от этого коварного, неприятного недуга, на нашем сайте вы отыщете легкий и быстрый способ решения проблемы. Приобщайтесь и живите полноценной, здоровой жизнью. Благодаря нам, все ответы на самые волнующие вопросы, теперь собраны в одном месте на удобной в использовании и высоко информационном ресурсе.

    ReplyDelete
  2. Anonymous1:02 AM

    Посетив нашу поисковую систему по сексу на веб-ресурсе, вы получите исключительно отличные и отличные порно видео в этом разделе, а также программы для анальных пар bonga cams по запросу на секс порно чат зрелих. На нашем ресурсе в каталоге собраны сливки секс-контента. Введя порно-поисковый запрос bonga cams anal couple, вы быстро насладитесь выбранным видео без регресса и без лишних жестов. На портале очень мало рекламаций, поэтому ничто другое не может помешать нам, чтобы насладиться качественным секс-видео по поисковому запросу bonga cams anal couple. Когда, согласно вашему порно запросу, у анальных пар bonga cams нет ни одного порно видео, не стесняйтесь писать нам в режиме мгновенного общения, и наши сотрудники немедленно исправят эту досадную ситуацию.

    ReplyDelete