2010-02-18 8 views
0

У нас довольно много логики в хранимых процедурах TSQL. Будучи большим поклонником автоматических тестов, я начал писать автоматические тесты для хранимых процедур.Тестирование логики хранимых процедур

Я тестирую хранимые процедуры, вызывая их из проекта C#. Я делаю все тесты касательно базы данных наследуемыми от базового класса, гарантирует, что тест выполняется в TransactionScope, который никогда не выполняется. Есть несколько вопросов, связанных с этим:
- Тесты медленны по сравнению с тестами, которые не касаются базы данных, но мало что можно сделать по этому поводу.
- Иногда я сталкиваюсь с проблемами FK, когда хочу получить базу данных в состояние, в котором я нуждаюсь, чтобы она была до запуска тестовой логики. Например. когда мне нужно обрезать таблицу, на которую ссылается FK, вы не можете этого сделать. Мне нужно также избавиться от строк в таблице ссылок.
- Иногда мне нужно написать новую хранимую процедуру или запрос, чтобы получить базу данных в том состоянии, в котором она вам нужна. С другой стороны, я знаю, что мне нужна подобная процедура позже для новых функций в любом случае.

Несмотря на эти недостатки, я по-прежнему предпочитаю писать тесты для логики хранимых процедур, так как у нас довольно много логики в хранимых процедурах. Используете ли вы аналогичный подход, что-то совершенно другое (например, TSqlUnit), или вы не испытываете испытания sprocs?

+2

Это удобный список причин, почему хранимые процедуры много боли при относительно небольшой стоимости. –

+1

Раньше я был прочно закрепился в лагере СП, но мой разум изменился. Сохраненные procs для CRUD просто громоздки; с OR-образцами и параметризованными встроенными запросами хранимые процедуры кажутся менее важными. – vfilby

+0

К сожалению, SP - это то, что я должен использовать, и это не изменится. Я боюсь. – trendl

ответ

0

Я думаю, что есть возможность протестировать ваши сохраненные procs из кода, поскольку он хранит все тесты в одном месте, где их можно легко запустить на машине dev или на машине сборки.

Несмотря на то, что это противоречит принципам Unit Testing (не настраивая и не срывая для каждого теста), я использую копию базы данных исключительно для тестирования и скрипт, который устанавливает данные таким образом, в котором я нуждаюсь. Этот сценарий может быть перезапущен по мере необходимости для чистой тестовой базы данных. Недостатком этого является постоянное обновление скрипта, поскольку вы говорите, что внешние ключи - это боль. Я использую плагин SQL Server Management Studio для сценариев вставки данных, чтобы упростить этот процесс.

Я считаю, что это плагин, который я использую: http://sqlblogcasts.com/blogs/seanprice/archive/2007/08/28/data-scripter-add-in-for-management-studio.aspx

Смежные вопросы