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


Использование утверждений 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 утверждения или условия тестирования C# или Visual Basic.

  • Сложная проверка. В некоторых случаях можно создавать более сложные тесты в 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)]

Where:

  • 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)

where:

  • @ErrorMessage — это любое сообщение об ошибке, определяемое пользователем. Эту строку сообщения можно форматировать аналогично printf_s функции.
  • @ErrorSeverity — это определяемый пользователем уровень серьезности от 0 до 18.

Замечание

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

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

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