Grester облегчает JUnit-тестирование Java-приложений

FoxPro

Jester, созданный Айвеном Муром (Ivan Moore), представляет собой превосходный инструмент, который тестирует unit-тесты, написанные программистами и разработчиками. Он основан на предположении, что в коде может существовать множество мест, содержащих операторы условных переходов, циклов и выбора, а также мест, в которых цикломатическая сложность классов в целом может резко возрастать или увеличиваться из-за множества возможных путей исполнения. Jester сосредоточен именно на таких участках кода. Но для его работы требуется хорошо отформатированный classpath к различным ресурсам.

Grester, который представляет собой оболочку Apache Maven вокруг Jester, упрощает рутинную работу по созданию classpath Java™ с учетом зависимостей проекта, облегчая тестирование с применением Jester. Кроме этого, Grester пытается реализовать некоторые преимущества Maven, который лежит в основе его инфраструктуры. Jester чрезвычайно полезен в качестве дополнительного средства проверки кода, написанного без учета требований разработки через тестирование. Это могут быть старые программы или код, недавно написанный программистами, которые считают методы разработки через тестирование, входящие в концепцию гибкой разработки ПО (Agile software development), слишком грубыми в качестве исходного принципа написания качественного кода.

На самом деле Grester можно использовать для демонстрации ограничений, с которыми сопряжено написание кода без применения метода разработки через тестирование. По моему опыту, постепенное изменение требований и код, написанный без учета того, что должно служить его истинной бизнес-функцией, увеличивают число ошибок и объем pack bay (что быстро приближает нас к антимодели blob, даже в небольших фрагментах кода, не обязательно выполненных в виде одного трудноуправляемого модуля или набора модулей).

В этой статье мы не будем вдаваться в технические детали интерпретации выходных данных Jester и приводить подробное описание его работы. За этой информацией обращайтесь к разделу Ресурсы, где приведена ссылка на превосходную статью Эллиотта Расти Гарольда (Elliott Rusty Harold), или посетите сайт сайт Айвена Мура. Здесь же приводятся рекомендации по приобретению и использованию Maven-модуля, выступающего оболочкой для Jester.

Где взять Grester

Grester можно взять из двух источников — оба они приведены в разделе Ресурсы. Необходимая для его работы инфраструктура минимальна: для его создания и применения нужен лишь Maven. Grester написан на Groovy, динамическом языке с Java-подобным синтаксисом, обладающем преимуществами таких языков, как Python и Ruby. В своей основе Grester представляет собой просто модуль Maven, предназначенный для быстрого исполнения инструмента Jester, так что всю свою силу Grester черпает из Jester. В примерах для этой статьи использовался Jester V1.37 с альфа-версией Grester V0.3.

В начало

Jester без рутины: почему бы и нет?

Если все зависимости проекта Java Archive (JAR) находятся в одном и том же месте, для прямого исполнения Jester достаточно указать единственный каталог в записи Java classpath. Когда же зависимости разбросаны по файловой системе, конфигурирование Jester для каждого прогона может стать чрезвычайно сложным и неприятным делом, особенно если места расположения отдельных зависимостей меняются. Maven существенно облегчает этот процесс.

Jester работает в каждом экземпляре снаружи от конфигурации сборки проекта Maven. Так в чем же особенность Grester? Дело в том, как Maven организует свои зависимости. Он не только старается сделать так, чтобы эта «компоновка» не оказалась неэффективной, но и предпринимает попытки стандартизовать как состояние, в котором находятся JAR (и, следовательно, Groovy) и Web-архивы (WAR) Java, так и место их нахождения.
Замечания для пользователей Linux и UNIX
Файл Grester невелик, и после его извлечения сам сжатый архив можно безопасно удалить. Здесь применялся пакет Cygwin на машине Windows, чтобы показать, как легко его извлечь — даже в имитируемой среде Linux. Однако с более ранними версиями Grester, чем версия 0.3, на системах Linux и UNIX экспериментировать не рекомендуется из-за отсутствия некоторых функций операционной системы, хотя альфа-версии для Windows достаточно стабильны. Со всеми версиями использовался Jester V1.37.

Для тех, кто не знаком с Maven, в нем используется идея репозитария. Существует локальный репозитарий по умолчанию, расположенный по адресу $USER_HOME\.m2\repository, и удаленный репозитарий, сконфигурированный в файле pom.xml или settings.xml, расположенный по адресу $MAVEN_HOME/conf.

В начало

Установка Grester

Найдите по ссылке сжатый TAR-файл (файлы .tar и tar.gz предназначены для UNIX® и Linux®) или файл ZIP для Microsoft® Windows® и распакуйте его. Это можно сделать несколькими способами: здесь я использую пакет Cygwin под Windows.

Рисунок 1. Извлечение Grester при помощи Cygwin под Windows

Можно также использовать утилиту TAR с опциями xzvf для tar.gz и опциями xvf для неформатированного файла .tar. Пример приведен на рис. 2.

Рисунок 2. Извлечение файла Grester tar.gz при помощи утилиты TAR

Окончательная структура каталога должна выглядеть, как на рис. 3.

Рисунок 3. Извлеченный Grester в Windows

В начало

Конфигурирование, компоновка и установка Grester

Теперь пора сообщить Maven о внешних репозитариях, из которых можно извлечь соответствующие зависимости Grester Groovy, чтобы скомпилировать и установить Grester как локальный модуль Maven. Для этого добавьте в файл $MAVEN_HOME/conf/settings.xml два удаленных репозитария, как показано ниже.