Статьи

Сушеный BDD от студии Pragmatists

18 мая 2010 года новый проект Studio Pragmatists из стекла и тумблера загрузил Tumbler 0.2.1 в Maven. Недавно, написав о JBehave, мне очень понравилась концепция поведенческого развития. Поэтому я решил написать аналогичную статью о Tumbler. Если вы хотите, чтобы код проекта был доступен в моем примере проекта .

4 часа в 20 минут!

Еще раз я решил отложить работу на 4 часа. На этот раз, хотя весь процесс занял около 20 минут. Владелец продукта и тестеры создают файл истории. Формат Tumbler позволяет создавать несколько историй, каждая из которых содержит сценарии, поэтому его можно охватить сложным набором требований в одном файле. Это обеспечивает гибкость при разбиении работы на задачи. Согласно обычному поведенческому подходу, сценарий содержит разделы « Задано» , « Когда» и « Затем», которые описывают поведение.

Простой файл поведения тумблера

Story: Building a simple page

Scenario: should create a page 4 lines long with 5 data items in each line
Given a data fixture capable of complex page checking
When a page is created with 'twenty' items on a page
Then there should be 'four' lines on a page with 'five' data items on each line

Генерация файлов Java

Следующим шагом является создание java из файлов сценариев, которые я использовал в конфигурации запуска eclipse, но в командной строке:

java -classpath Tumbler.jar tumbler.ScenarioToJavaConverter YOUR_STORY.scenario

Для приведенного выше сценария это был результат. Обратите внимание на создание заданных, когда и затем методов и @story, аннотаций @Scenario, которые соответствуют исходному файлу.

import org.junit.*;
import static org.junit.Assert.*;
import static tumbler.Tumbler.*;

@RunWith(TumblerRunner.class)
@Story("Building a simple page")
public class BuildingASimplePageScenarios {

@Scenario(pending = true)
public void shouldCreateAPage4LinesLongWith5DataItemsInEachLine() {
given("a data fixture capable of complex page checking");

when("a page is created with 'twenty' items on a page");

then("there should be 'four' lines on a page with 'five' data items on each line");
}
}

Который просто оставляет заполнение в поведении и фактическом тесте

@RunWith(TumblerRunner.class)
@Story("Building a simple page")
public class BuildingASimplePageScenarios {
private SimplePage page;

@Scenario(pending = false)
public void shouldCreateAPage4LinesLongWith5DataItemsInEachLine() {
given("a data fixture capable of complex page checking");
final PageDataFixture dataFixture = new PageDataFixture();

when("a page is created with 'twenty' items on a page");
page = SimplePage.newInstance(dataFixture.getDataItem(), 20);

then("there should be 'four' lines on a page with 'five' data items on each line");
Map expectedLines = dataFixture.createPageExpectation(4, 5);

Map actualMap = page.getMap();

assertThat(actualMap, is(expectedLines));
}
}

Наконец, есть два флага, которые могут быть применены к исполнителю теста, который включает создание отчета. (-DgenerateReport = html -DoutputFolder = target) Было бы легко настроить профиль maven, который собрал все файлы сценариев и передал эти два флага. Стандартный отчет использует Freemarker, поэтому было бы легко создать свой собственный. Это простой список сценариев и их подробностей.

Вот так выглядел мой отчет

Хорошие моменты

  • Что касается JBehave, мне нравится попытка приблизить владельца продукта к членам группы тестирования и разработки.
  • Это очень простая система с очень маленькой кривой обучения
  • Генерация Java повышает производительность и позволяет владельцу продукта работать с отдельными артефактами.

Плохие очки

  • В настоящее время это очень ранняя бета-версия. Не столько критика, сколько напоминание о том, что на этой стадии все может развиваться с перерывами.
  • Я хотел бы видеть возможность генерировать параметры из файлов сценариев. Если нет, то есть способ отредактировать тесты, чтобы ввести тестирование на основе параметров
  • Скрам и проворный являются итеративными. Добавление к исходным файлам сценария будет означать создание классов снова. Это оставляет разработчику неприятную задачу переноса изменений. Это может быть решено, если входными данными были файл сценария и завершенная тестовая Java, с выходными данными, которые модифицируют и добавляют. Запуск их показал бы разрывы, если бы параметры были также частью поколения.

Вывод

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