2013-07-04 3 views
2

Я хочу реализовать Test First Development в проекте, который будет реализован только с использованием хранимых процедур и функций в SQL Server.Модульные тесты для хранимых процедур в SQL Server

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

ответ

4

Это, конечно, можно выполнить тестирование блоков SQL в стиле xUnit и TDD для разработки баз данных. Я делаю это так в течение последних 4 лет. Существует множество популярных тестовых фреймворков на основе T-SQL, таких как tsqlunit. У Красных ворот также есть продукт в этой области, на который я кратко посмотрел.

Затем, конечно, вы можете написать свои тесты на другом языке, например C#, и использовать NUnit для их вызова, но это входит в область интеграции, а не модульные тесты, и лучше для проверки взаимодействия между вашим back-end и ваш открытый интерфейс SQL.

http://sourceforge.net/apps/trac/tsqlunit/

http://tsqlt.org/

Возможно, я могу быть настолько смелым, чтобы направить вас к руководству по собственному (100% T-SQL) рамках модульного тестирования SQL Server - SS-Unit - как дает некоторое представление о том, как вы можете писать юнит-тесты, даже если вы не собираетесь использовать его: -

http://www.chrisoldwood.com/sql.htm

http://www.chrisoldwood.com/sql/ss-unit/manual/SS-Unit.html

Я также несколько лет тому назад представлял АССУ о том, как тестировать код T-SQL, и слайды для этого также доступны с некоторыми примерами того, как вы можете писать модульные тесты до или после.

http://www.chrisoldwood.com/articles.htm

Вот сообщение в блоге на основе вокруг моей базы данных TDD разговора на ACCU конференции пару лет назад, что сопоставляет несколько соответствующих должностей (все шахты, к сожалению) вокруг этого пути разработки базы данных API.

http://chrisoldwood.blogspot.co.uk/2012/05/my-accu-conference-session-database.html

(Это кажется довольно безвозмездным количеством пупа смотрящего. Это не означало быть, это просто, что у меня есть ряд ссылок на биты и куски, которые я думаю, актуальны. Я буду с удовольствием удалите ответ, если он нарушает правила SO)

+1

Ваше сообщение было очень полезно для меня, спасибо. Я начинаю изучать вашу модульную систему тестирования и на данный момент кажется очень хорошим для моих намерений.Я просто нахожу возможную проблему в сценариях установки. Файл CreateSchemas.sql не создает схему «test». Если есть лучшие места для публикации этой проблемы, дайте мне знать. Просто окончательное предложение, вы должны поместить свой код в репозиторий с открытым исходным кодом, например, github, он будет более доступным, и вы сможете воспользоваться дополнительными улучшениями для добровольцев. – miguelbgouveia

+1

Это оказалось на GitHub здесь: https://github.com/chrisoldwood/SS-Unit –

1

Это выполнимо. Создайте тесты и в настройке создайте новый экземпляр db и дайте ему некоторые данные, а затем выполните procs. Подтвердите свои предположения, например, я вернул правильные данные. Оставьте тестовый db, затем повторите все это в следующем тесте.

1

Модульное тестирование в базе данных на самом деле является большой темой, и есть много разных способов сделать это. Самый простой способ сделать это - написать собственный тест, подобный этому :

BEGIN TRY 
<statement to test> 
THROW 50000,'No error raised',16; 
END TRY 
BEGIN CATCH 
if ERROR_MESSAGE() not like '%<constraint being violated>%' 
THROW 50000,'<Description of Operation> Failed',16; 
END CATCH 

В этой связи ay вы можете реализовать различные типы данных: - Ограничение CHECK, тесты ограничения внешнего ключа, тесты уникальности и т. д.

+0

Является ли это хорошим модульным тестом? Если вы тестируете хранимую процедуру, это будет проверять, существует ли она и что она выполняется, но не будет проверять, делает ли она правильную вещь (т. Е. Что это поведение - это то, что полагается в другом месте). – Maverick

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