очистка базы данных в приемочных тестах с помощью specflow - PullRequest
1 голос
/ 26 мая 2011

Я новичок в ТДД.Я смотрел видео Брэндона Сатрома.Я пытаюсь реализовать подобные тесты, внешний цикл для приемочных тестов и внутренний цикл для модульных тестов.Я думал, что приемочный тест был снова и в базе данных. Так что я ожидаю найти примеры событий [BeginScenario / AfterScenario] для очистки базы данных в Specflow. Говорят, что он используется для очистки базы данных.Но ни один из примеров, которые я видел, не делал этого.

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

Ответы [ 3 ]

3 голосов
/ 13 июня 2011

Я использую реальную базу данных MS SQL Server в своих модульных тестах интеграции (MSTest) и приемочном тестировании с помощью инструмента BDD SpecFlow следующим образом: у меня есть дамп моей тестовой базы данных (файлы MDF / LDF), сохраненный в качестве шаблона , При инициализации теста я копирую их во временное расположение, присоединяю их к выделенному серверу SQL с помощью хранимой процедуры sp_attach_db (для этого вы можете использовать Express Edition), затем я запускаю любой код теста, который мне нужен, и при очистке теста отсоединяю базу данных теста и удалите файлы MDF / LDF. Весь цикл копирования / прикрепления / отсоединения / удаления довольно быстрый (по крайней мере, намного быстрее, чем я думал раньше). Если вам интересно, я мог бы написать об этом еще несколько слов в моем блоге.

2 голосов
/ 02 июня 2011

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

Теперь я использую тест приемлемости, как предполагается, для тестирования потока моих пользовательских интерфейсов и базы данных.я написал счастливый путь для моей страницы регистрации, чтобы спроектировать поток страниц.Затем я написал тест на логику, который хранился в моих хранимых процедурах в базе данных.Другая логика на контроллерах и модельных классах.Поэтому для них я использовал модульные тесты.Теперь это имеет больше смысла для меня, до моей следующей путаницы с tdd:).

Что касается процесса очистки, я использую события [BeginScenario / AfterScenario].В BeginScenario я использую глобальную переменную, чтобы сохранить значение DateTime.Now.Ticks и объединить его в начале значений, которые я отправил в БД.Затем я нахожу записи, которые начинаются с этого значения DateTime.Now.Ticks, когда я выполняю очистку для этого сценария в событии AfterScenario.Так что это помогло мне создать уникальные значения, которые не мешают другим записям.Кажется, к настоящему времени все работает.

1 голос
/ 29 марта 2012

Что касается этого вопроса, эта статья очень полезна.

В нем описывается использование транзакций в MSDTC, начиная с BeginScenario и возвращаясь к AfterScenario. (SpecFlow не используется в статье, но имеет ту же концепцию)

В настоящее время мы успешно используем эту технику в проекте разработки среднего масштаба.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...