Коммерческие инструменты BDD для платформы Java

В течение последних нескольких недель я экспериментировал с несколькими средами приемочных испытаний для Java (например, Fitnesse, JBehave).

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

Наши требования (неполный и несортированный список):

  • Использование текстов в стиле данный/когда/тогда И таблиц
  • Интеграция со стандартными библиотеками, такими как JUnit, Mockito
  • IDE-интеграция/инструментарий
  • Хорошая отчетность (читабельность для бизнес-аналитиков, диагностика для разработчиков)

person jens    schedule 22.10.2013    source источник


Ответы (4)


Для коммерческих альтернатив:

  • "Twist" компании Thoughtworks
  • "Business Story Manager" Пола Джеррарда, который также играет роль в некоторых шаблонах BDD более высокого уровня, выявление заинтересованных сторон и отслеживание взаимосвязи сценариев с более масштабными требованиями

Это единственные два, о которых я знаю. Ни один из них не имеет большого количества последователей в сообществе BDD. Я считаю, что двумя наиболее часто используемыми инструментами являются JBehave и Cucumber (которые, как указывает @kazakovs, также доступны для JVM). Они помогают фиксировать англоязычные сценарии, которые будут понятны как разработчикам, так и бизнес-аналитикам. Я также использовал (эквивалент .NET) Fitnesse с Slim за ним; немного CSS делает его похожим на другие, а также позволяет использовать таблицы.

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

Если вы хотите интегрировать Mockito и JUnit, может показаться, что вы пытаетесь выполнить BDD в меньшем масштабе, с классами или небольшими группами классов. Именно так изначально зародился BDD, и он совершенно действителен.

С момента создания BDD такие инструменты, как JUnit, улучшились, а Mockito не существовало! Так что инструменты BDD больше не особо нужны. Для кода уровня класса я был бы рад просто использовать комментарии с данными, когда и тогда на месте, например это (это C#, но Java будет похожей).

В качестве альтернативы на более высоком уровне вы всегда можете создать маленький DSL. Это не заняло у меня много времени, и это понятно даже для нетехнических деловых людей. Он работает с использованием JUnit, и вы можете поместить туда Mockito, если хотите (но я все еще подозреваю, что вы смешиваете проблемы, если хотите это сделать).

Еще одним преимуществом DSL является то, что это быстрый и дешевый способ начать работу, без каких-либо накладных расходов на настройку Cucumber или JBehave; но созданные шаги легко переносятся на что-то вроде JBehave позже (вы просто перемещаете код в шаги регулярных выражений JBehave, и я был бы удивлен, если бы вы не могли сделать что-то подобное с Twist). Поскольку вы не уверены в своих требованиях, я бы порекомендовал этот маршрут, так как он поможет вам начать работу и получить больше информации о том, что вам нужно, очень дешево.

person Lunivore    schedule 29.10.2013
comment
Спасибо за Ваш ответ. Мы нашли Twist в конце прошлой недели - все еще ждем пробную лицензию :-( - person jens; 29.10.2013
comment
Мы все еще пытаемся найти правильные инструменты/подходы для разных областей... Мы экспериментировали как со стилем Given/When/Then, так и со стилем micro DSL в тестах JUnit. И то, и другое прекрасно, если у вас нет большого набора похожих входных комбинаций. Подходы, основанные на коде, не позволяли нам вести обзор всех примеров использования и находить отсутствующие примеры. Использование @Parametrized в JUnit не является хорошим удобочитаемым подходом к представлению таблиц решений. И, конечно же, код не всегда является хорошим средством для облегчения коммуникации, что, очевидно, не является для вас новой информацией. - person jens; 29.10.2013
comment
@jens, одно из преимуществ, которое вы можете получить от Cucumber et al, — это возможность повторного использования шагов. Это применимо только на системном уровне (на уровне модуля у классов должны быть одни обязанности, без дублирования, поэтому не должно быть дублированных шагов). Поэтому я рекомендую стиль комментариев для классов. Если вы используете таблицы принятия решений, вы всегда можете смешивать Fitnesse / Slim и традиционный Fitnesse, или Cucumber довольно легко позволяет использовать таблицы. - person Lunivore; 29.10.2013
comment
Кроме того, если у вас есть много похожих комбинаций входных данных в сценариях, попробуйте использовать какую-либо справочную информацию по умолчанию, а затем вызовите эту разницу, а также влияние на поведение в реальных сценариях. Это значительно облегчает понимание того, что происходит, и делает их более интересными для всех, кто читает их, будь то бизнес или нет. - person Lunivore; 29.10.2013

Взгляните на Cucumber-JVM, но я не уверен, что он коммерческий.

person kazakovs    schedule 22.10.2013

Я добился большого успеха с Spock Framework, если вы можно использовать Groovy. Вы также можете использовать его вместе с Geb для тестирования пользовательского интерфейса. Позднее мы перешли с Geb на Twist. так как он дешевле за большую функциональность, которую он предоставляет. Мы по-прежнему используем Spock для всех сервисных тестов (WebService, REST и т. д.). Прочтите мой другой связанный ответ здесь Демонстрация с использованием Spock

person Aravind Yarram    schedule 29.10.2013

Я бы предложил взглянуть на Concordion (http://www.concordion.org) — да, я должен признать, что это инструмент с открытым исходным кодом, а не коммерческий. Тем не менее, это может подойти, исходя из списка ваших требований:

  • Поскольку спецификации Concordion написаны на простом английском языке, вы можете использовать выражения «данные/когда/тогда», а также таблицы. В наших проектах мы идем еще дальше и пишем нашу документацию на основе технологии Concordion. В результате вы получаете живую систему документации, в которой автоматизация проверяет, соответствует ли ваше описание ожидаемого поведения реальному приложению.

  • Concordion использует JUnit для запуска тестов/активных спецификаций. В классах фикстур вы можете использовать любой предпочитаемый фреймворк, например Mockito. Я сам успешно использовал комбинацию Concordion и Mockito в своих проектах.

  • Интеграция Concordion в IDE хороша, так как она основана на JUnit. Таким образом, вы можете использовать Concordion везде, где есть поддержка JUnit. Я использую Eclipse IDE, где вы можете запускать и отлаживать тесты Concordion, вызвав «Запустить тест JUnit» из контекстного меню.

  • Concordion предоставляет HTML-отчеты, основанные на ваших спецификациях. Таким образом, ваши деловые люди могут легко увидеть, что пошло не так, просмотрев указанное описание и прочитав отчет, предоставленный системой. Различия визуализируются Concordion в документах HTML. Кроме того, поскольку тесты Concordion выполняются JUnit, вы получаете всю поддержку отчетов, к которой вы, вероятно, привыкли в JUnit. Вы можете легко отлаживать тесты Concordion, например. в Eclipse IDE, как и любые другие тесты JUnit.

person user3632158    schedule 13.05.2014