Подтвердить что ты не робот

BDD в Scala - Нужно ли быть уродливым?

Я использовал lettuce для python в прошлом. Это простая структура BDD, где спецификации написаны во внешнем текстовом файле. Реализация использует regex для идентификации каждого шага, доказывая многоразовый код для каждого предложения в спецификации.

Используя scala, либо с specs2, либо scalatest меня принуждают чтобы написать спецификацию наряду с реализацией, что делает невозможным повторное использование реализации в другом тесте (конечно, мы могли бы реализовать ее в какой-либо функции где-то) и сделать невозможным отделить реализацию теста от самой спецификации (то, что я использовал для делать, обеспечивая приемочные испытания клиентам для проверки).

В заключение я поднимаю вопрос: учитывая важность проверки тестов клиентами, есть ли способ в рамках BDD для scala загружать тесты из внешнего файла, создавая исключение, если предложение в тесте не является все еще выполняются и выполняются тесты, если все предложения были реализованы?

4b9b3361

Ответ 1

Я только что открыл плагин огурца для sbt. Тесты будут выполняться в тесте / scala, а спецификации будут храниться в тесте/ресурсах в виде простых файлов txt. Я просто не уверен, насколько надежна библиотека, и если она будет иметь поддержку в будущем.

Изменить: Вышеприведенное является оболочкой для следующего плагина, который идеально решает проблему и поддерживает Scala. https://github.com/cucumber/cucumber-jvm

Ответ 2

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

Однако они также довольно жесткие, как спецификации, потому что они налагают строгий формат, основанный на функциях и "Дать-когда-Тогда". Например, в specs2 мы можем написать любой текст, который мы хотим, и аннотировать только строки, которые предназначены для действий в системе или проверки. Недостатком является то, что текст становится аннотированным и что pending должен быть явно указан, чтобы указать, что еще не реализовано. Также аннотация - это просто ссылка на какой-то код, где-то живущий, и вы можете, конечно, использовать обычные методы программирования, чтобы получить возможность повторного использования.

BTW, ссылка выше - интересный пример компромисса: в этом файле первая спецификация "уродливая", но есть больше проверок времени компиляции что шаг When использует информацию с шага Given или что у нас нет последовательности шагов Then -> When. Вторая спецификация более приятная, но также более подверженная ошибкам.

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

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

Нет, безусловно, идеального решения. Мой собственный вывод состоит в том, что артефакты BDD должны быть в руках разработчиков и проверены другими заинтересованными сторонами, непосредственно считывая код, если он читается или читает вывод html/pdf. И если артефакты BDD принадлежат разработчикам, они могут также использовать свои собственные инструменты, чтобы облегчить их жизнь с помощью проверки (используя, когда это возможно, компилятор) и обслуживания (с использованием автоматических рефакторингов).

Ответ 3

Вы сказали себе, что легко сделать повторное использование реализацией обычными методами Scala обеспечивает такой тип stuf (методы, функции, черты, классы, типы...), поэтому на самом деле нет проблема есть.

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

Другой вариант - использовать JBehave или любую другую структуру на основе JVM, они должны работать с Scala без проблем.

Ответ 4

Основными критериями проектирования Eric была устойчивость разработки исполняемых спецификаций (через рефакторинг), а не начальное удобство из-за "красоты" простого текста.

см. http://etorreborre.github.io/specs2/

Особенности specs2:

  • Параллельное выполнение примеров по умолчанию
  • Свойства ScalaCheck
  • Mocks with Mockito
  • Таблицы данных
  • AutoExamples, где исходный код извлекается для описания примера
  • Богатая библиотека совпадений
  • Простота создания и компоновки
  • Полезно с must и should
  • Возврат "функциональных" результатов или исключение бросания
  • Многократно используется вне specs2 (например, в тестах JUnit)
  • Формы для написания спецификаций, ориентированных на фитнес (с разметкой Markdown)
  • Отчеты Html для создания документации для приемочных испытаний, для создания руководства пользователя
  • Фрагменты для документирования API с всегда обновляемым кодом
  • Интеграция с инструментами sbt и JUnit (maven, IDE,...)

Specs2 впечатляет как в дизайне, так и в реализации. Если вы посмотрите внимательно, вы увидите, что DSL может быть расширен, пока вы держите в строю и сильную команду кода домена.

Тот, кто оставляет в стороне "более уродливый" аргумент и пытается это серьезно обретет силу. Оформить структурированные формы и фрагменты