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

 

В модульном тесте SQL Server выполняется один или несколько скриптов Transact-SQL тестов. Результаты можно проверить с помощью скрипта Transact-SQL и предложений THROW или RAISERROR, которые используются для получения ошибки и сбоя теста. Также для проверки результатов можно задать условия теста. Тест возвращает экземпляр класса SqlExecutionResult. Экземпляр этого класса содержит один или несколько наборов данных, время выполнения и строки, затронутые скриптом. Все эти сведения собираются во время выполнения скрипта. Эти результаты можно оценить с помощью условий теста.SQL Server Data Tools предоставляет набор предопределенных условий теста. Можно также создавать и использовать нестандартные условия. См. раздел Нестандартные условия теста для модульных тестов SQL Server.

Стандартные условия теста

В следующей таблице приведены стандартные условия теста, которые можно добавлять с помощью панели «Условия теста» конструктора модульных тестов SQL Server.

Условие теста Описание условия теста
Контрольная сумма данных Не выполняется, если контрольная сумма результирующего набора, возвращенного скриптом Transact-SQL, не совпадает с ожидаемой суммой. Дополнительные сведения см. в разделе Указание контрольной суммы данных. Note: Использование этого условия теста не рекомендуется, если каждый запуск теста возвращает разные данные. Например, если результирующий набор содержит формируемые даты, или отметки времени, или столбцы идентификаторов, тесты будут завершаться неудачей, так как при каждом запуске контрольная сумма будет разной.
Пустой набор ResultSet Не выполняется, если результирующий набор, возвращенный скриптом Transact-SQL, не пуст.
Время выполнения Не выполняется, если скрипт Transact-SQL теста выполняется дольше, чем ожидается. По умолчанию время выполнения равно 30 секундам.

Время выполнения относится только к скрипту теста, но не к скриптам, выполняемым до и после теста.
Ожидаемая схема Не выполняется, если столбцы и типы данных результирующего набора отличаются от столбцов и типов данных, заданных в условии теста. Схема указывается в свойствах условия теста. Дополнительные сведения см. в разделе Указание ожидаемой схемы.
С неопределенным результатом Всегда формирует тест с неопределенным результатом. Это условие добавляется в каждый тест по умолчанию. Оно указывает на то, что проверка теста не выполнена. Удалите это условие из теста после добавления других условий.
Не пустой набор ResultSet Не выполняется, если возвращен пустой результирующий набор. Это условие теста или EmptyResultSet можно использовать в скрипте теста вместе с функцией Transact-SQL @@RAISERROR для проверки правильности применения обновления. Например, можно сохранить значения до обновления, выполнить обновление, сравнить полученные значения и сформировать ошибку, если ожидаемые результаты не были получены.
Количество строк Не выполняется, если результирующий набор не содержит ожидаемое количество строк.
Скалярное значение Не выполняется, если определенное значение в результирующем наборе не равно указанному значению. По умолчанию ожидаемое значение — null.
System_CAPS_ICON_note.jpg Примечание


Условия теста «Время выполнения» задает временной лимит, в который должно уложиться время выполнения скрипта Transact-SQL. При превышении этого предела тест завершается неудачей. Результаты теста также содержат статистику «Продолжительность», которая отличается от условия теста «Время выполнения». Статистика по продолжительности содержит не только время выполнения, но также два значения времени на подключение к базе данных, время на выполнение других скриптов, например скриптов, выполняемых перед и после теста, и время на выполнение условий теста. Тест считается пройденным, даже если его продолжительность больше значения времени выполнения.

Полученное значение для продолжительности не содержит время, использованное на формирование данных и развертывание схемы, потому что эти действия выполняются до запуска тестов. Чтобы просмотреть сведения о продолжительности теста, в окне Результаты теста щелкните выполнение теста правой кнопкой мыши и выберите команду Просмотреть подробные результаты теста.

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

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

Ожидаемые неудачи

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

  • Проверка хранимой процедуры, которая удаляет данные клиента, при тесте должна завершаться неудачей, если указывается недопустимый идентификатор клиента.

  • Проверка того, что хранимая процедура, заполняющая заказ, не выполняется, если заказ не был размещен или уже был заполнен.

  • Проверка того, что хранимая процедура, отменяющая заказ, не выполняется, если заказ был выполнен или был отменен ранее.

Можно определить модульные тесты SQL Server для хранимых процедур, которые вызывают ожидаемые исключения. К методу модульного теста можно добавить атрибут, чтобы указать, какие исключения следует ожидать. Таким образом можно предотвратить неудачу выполнения теста при возникновении такого исключения.

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

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

Где:

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

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

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

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

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

Указание контрольной суммы данных

Чтобы открыть конструктор модульных тестов SQL Server, дважды щелкните файл исходного кода модульного теста в обозревателе решений.

После добавления условия теста «Контрольная сумма данных» к модульному тесту БД следует указать контрольную сумму, выполнив следующие действия.

Указание ожидаемой контрольной суммы

  1. В списке условий теста выберите условие контрольной суммы данных, для которого нужно указать контрольную сумму.

  2. Откройте окно Свойства, нажав F4. Это окно также можно открыть из меню Вид, выбрав пункт Свойства.

  3. (Необязательно) Вы может изменить свойство Имя условия теста, чтобы дать ему более описательное имя.

  4. Рядом со свойством Конфигурация нажмите кнопку обзора ().

    Откроется диалоговое окно Конфигурация для TestConditionName.

  5. Укажите подключение к тестируемой базе данных. Дополнительные сведения см. в разделе Инструкция. Создание подключения к базе данных.

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

    Важно!


    При изменении условия контрольной суммы, для которого ранее была задана контрольная сумма, все изменения, произведенные на панели редактирования, сохранены не будут. Перед нажатием кнопки Получить нужно снова внести эти изменения.

  7. Нажмите Получить.

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

  8. Если результаты совпадают с ожидаемыми значениями теста, нажмите кнопку ОК. В противном случае измените код Transact-SQL и повторяйте шаги 6, 7 и 8, пока результаты не совпадут с ожидаемыми.

    Столбец Значение условия теста содержит ожидаемую контрольную сумму.

Указание ожидаемой схемы

После добавления условия теста «Ожидаемая схема» к модульному тесту SQL Server следует указать ожидаемую схему, выполнив следующие действия.

Указание ожидаемой схемы

  1. В списке условий теста выберите условие «Ожидаемая схема», для которого нужно указать схему.

  2. Откройте окно Свойства, нажав F4. Это окно также можно открыть из меню Вид, выбрав пункт Свойства.

  3. (Необязательно) Вы может изменить свойство Имя условия теста, чтобы дать ему более описательное имя.

  4. Рядом со свойством Конфигурация нажмите кнопку обзора ().

    Откроется диалоговое окно Конфигурация для TestConditionName.

  5. Укажите подключение к тестируемой базе данных. Дополнительные сведения см. в разделе Инструкция. Создание подключения к базе данных.

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

    Важно!


    При изменении условия ожидаемой схемы, для которого ранее была задана схема, все изменения, произведенные на панели редактирования, сохранены не будут. Перед нажатием кнопки Получить нужно снова внести эти изменения.

  7. Нажмите Получить.

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

  8. Если результаты совпадают с ожидаемыми значениями теста, нажмите кнопку ОК. В противном случае измените код Transact-SQL и повторяйте шаги 6, 7 и 8, пока результаты не совпадут с ожидаемыми.

    Столбец Значение условия теста содержит сведения об ожидаемой схеме. Например: «Ожидается: 2 таблицы».

Расширяемые условия теста

В дополнение к шести стандартным условиям теста можно написать собственные условия. Эти условия будут отображаться на панели условий конструктора модульных тестов SQL Server. Дополнительные сведения см. в разделе Нестандартные условия теста для модульных тестов SQL Server.

См. также

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