Как я могу описать поведение «менее простого» (BDD) в коде? - PullRequest
1 голос
/ 28 января 2010

Предположим, что я собираюсь нарисовать некоторый предоставленный пользователем текст на растровом изображении в C #, какие тесты я бы написал заранее?

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

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

Ответы [ 5 ]

2 голосов
/ 28 января 2010

Хм .. Я хотел бы привести несколько более конкретных примеров поведения, которое вы хотите проверить.

AFAIK, BDD не зависит от сложности. Если вы можете объяснить это кому-то по-английски, вы можете написать сценарий BDD / .

GIVEN some text entered by the user 'DRAW THIS'
WHEN I have a bitmap 'c:\temp\SampleImage.bmp'
THEN the text should be drawn on the bitmap

Далее вы отображаете каждый из перечисленных выше шагов , чтобы склеить код - это ключи в коде вашего приложения

  • некоторый текст, введенный пользователем 'DRAW THIS' => setText ('DRAW THIS')
  • У меня есть растровое изображение 'c: \ temp \ SampleImage.bmp' => loadBitmap ('c: \ temp \ SampleImage.bmp')
  • текст должен быть нарисован на растровом изображении => verifyTextOnBitmapInMemory ()

Клеевой код предназначен для разработчиков и может быть настолько сложным, насколько требует ситуация. То же самое в TDD.

1 голос
/ 28 января 2010

Это не так сложно, с правильной библиотекой. Проверьте Одобрительные тесты , для Java, .net и ruby. Полное раскрытие: написано моими друзьями.

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

0 голосов
/ 28 января 2010

Как уже упоминали другие, это действительно сложно. Что вам действительно нужно, так это модульное тестирование GUI, чтобы вы могли написать тест BDD, например:

public void can_draw_user_supplied_text_on_bitmap()
{
    draw_on_bitmap();
    check_bitmap()
}

Единственный инструмент, который делает это легко - это IcuTest .
Конечно, я очень предвзятый; Я это написал. Если вы заинтересованы в бета-версии, дайте мне знать.

0 голосов
/ 28 января 2010

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

Однако вы можете легко добавить полуавтоматический тест.

  • запустить тест
  • форма отображается с растровым изображением и (надеюсь) текстом, нарисованным на
  • да / нет всплывающее диалоговое окно (запущенное методом теста) - "текст нарисован правильно?"
  • нажмите кнопку датестовые экзамены;нажмите нет, не получится

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

0 голосов
/ 28 января 2010

Возможно, да (см. OCR и компьютерное зрение ). Реалистично, нет.

(Это может стать возможным в ближайшем будущем: Программирование на основе изображений , Проект SIKULI )

...