Поделиться через


Использование проверочных утверждений 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

Примечание

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

Утверждения Transact-SQL можно выполнять непосредственно на сервере, добавив инструкцию RAISERROR в скрипт Transact-SQL. Он имеет следующий синтаксис:

RAISERROR (@ErrorMessage, @ErrorSeverity, @ErrorState)

где:

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

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

Примечание

Значения степени серьезности 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 для изменения