Использование проверочных утверждений Transact-SQL в модульных тестах SQL Server

 

При выполнении модульного теста SQL Server запускается скрипт Transact-SQL теста, который возвращает результат.Иногда результаты возвращаются в виде результирующего набора.Результаты можно проверить с помощью условий теста.Например, по тестовому условию можно проверить число возвращенных строк в результирующем наборе. Можно также проверить время, которое заняло выполнение конкретного теста.Дополнительные сведения об условиях теста см. в разделе Использование условий теста в модульных тестах SQL Server.

Вместо условий теста можно воспользоваться проверочными утверждениями Transact-SQL, которые определяются с помощью инструкций THROW или RAISERROR в скрипте Transact-SQL.В определенных обстоятельствах следует выбирать проверочные утверждения Transact-SQL, а не условия теста.

Использование проверочных утверждений Transact-SQL

Прежде чем принимать решение о проверке данных через проверочные утверждения Transact-SQL или через условия теста, необходимо рассмотреть следующие моменты.

  • Производительность.Быстрее выполнить проверочное утверждение Transact-SQL на сервере, чем передавать данные на клиентский компьютер и обрабатывать их локально.

  • Степень владения языком.Выбор языка осуществляется на основе опыта владения им, исходя из этого и выбирается использование проверочных утверждений Transact-SQL или условий теста Visual C# или Visual Basic.

  • Сложная проверка.В некоторых случаях можно создать более сложные тесты в Visual C# или Visual Basic и выполнять проверку тестов на клиенте.

  • Простота.Часто проще использовать предопределенное условие теста, а не писать эквивалентный скрипт с помощью Transact-SQL.

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

Пометка методов модульного теста ожидаемым исключением

Чтобы отметить в методе модульного теста SQL Server ожидаемые исключения, добавьте следующий атрибут:

<ExpectedSqlException(MessageNumber=nnnnn, Severity=x, MatchFirstError=false, State=y)> _
[ExpectedSqlException(MessageNumber=nnnnn, Severity=x, MatchFirstError=false, State=y)]

Где:

  • nnnnn — номер ожидаемого сообщения, например 14025;

  • x — серьезность ожидаемого исключения;

  • y — состояние ожидаемого исключения.

Любые неуказанные параметры не используются.Эти параметры передаются инструкции RAISERROR в коде базы данных.Если указано MatchFirstError = true, то атрибут будет в исключении соответствовать любой из SqlErrors.По умолчанию (MatchFirstError = true) сопоставление происходит только с первой возникшей ошибкой.

Пример использования ожидаемых исключений и отрицательного модульного теста SQL Server см. в разделе Пошаговое руководство. Создание и запуск модульного теста SQL Server.

Инструкция RAISERROR

System_CAPS_noteПримечание

Используйте THROW вместо RAISERROR.Предложение RAISERROR является устаревшим.

Проверочные утверждения Transact-SQL можно использовать непосредственно на сервере с помощью инструкции RAISERROR в скрипте Transact-SQL.Синтаксис:

**RAISERROR (@ErrorMessage, @ErrorSeverity, @ErrorState)**

где:

@ErrorMessage — любое, определяемое пользователем сообщение об ошибке.Форматирование строки сообщения производится так же, как и в функции printf_s.

@ErrorSeverity — определяемая пользователем степень серьезности (0–18).

System_CAPS_noteПримечание

Значения степени серьезности 0 и 10 не приводят к сбою модульного теста SQL Server.Чтобы вызвать сбой проверки, необходимо указывать значение в диапазоне от 0 до 18.

@ErrorState — произвольное целое число от 1 до 127.Оно служит для различения повторений одной и той же ошибки, возникшей в разных местах кода.

Дополнительные сведения см. в разделе Предложение RAISERROR (Transact-SQL).Пример использования RAISERROR в модульном тесте SQL Server приведен в разделе Практическое руководство. Написание модульного теста SQL Server, который выполняется в области действия одной транзакции.

См. также

Создание и определение модульных тестов SQL Server
Использование условий теста в модульных тестах SQL Server
Проверка кода базы данных с помощью модульных тестов SQL Server
Практическое руководство. Открытие модульного теста SQL Server для его изменения