Модульные тесты для хранимых процедур в SQL Server

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

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

3 ответа

Решение

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

Тогда, конечно, у вас есть возможность написать свои тесты на другом языке, например C#, и использовать NUnit для их вызова, но это входит в сферу интеграции, а не в модульные тесты, и лучше подходит для проверки взаимодействия между вашим бэкэндом и ваш открытый интерфейс 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

Несколько лет назад я также представил ACCU презентацию о том, как выполнять модульное тестирование кода 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)

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

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

Таким образом, вы можете реализовать различные виды тестов данных: - ограничение CHECK, тесты ограничений внешнего ключа, тесты уникальности и так далее...

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

Другие вопросы по тегам