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


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

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

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

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

Условие теста Описание условия теста
Контрольная сумма данных Завершается ошибкой, если контрольная сумма результирующего набора, возвращенная из скрипта Transact-SQL, не соответствует ожидаемой контрольной сумме. Дополнительные сведения см. в разделе "Указание контрольной суммы данных".

Заметка: Это условие теста не рекомендуется, если вы возвращаете данные, которые зависят от тестовых запусков. Например, если результирующий набор содержит сгенерированные даты или время или столбцы идентификаторов, ваши тесты завершаются ошибкой, так как контрольная сумма отличается при каждом запуске.
Пустой результирующий набор Завершается неудачно, если результирующий набор, возвращенный из скрипта Transact-SQL, не пуст.
Время выполнения Завершается ошибкой, если выполнение тестового скрипта Transact-SQL занимает больше времени, чем ожидалось. Время выполнения по умолчанию — 30 секунд.

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

Условие теста времени выполнения указывает ограничение времени, при котором должен выполняться скрипт 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)]

Where:

  • nnnnn — это число ожидаемого сообщения, например 14025
  • X — это серьезность ожидаемого исключения
  • y — это состояние ожидаемого исключения

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

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

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

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

После добавления условия теста контрольной суммы данных в модульный тест базы данных необходимо настроить ожидаемую контрольную сумму с помощью следующей процедуры:

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

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

  2. Откройте окно свойств , нажав клавишу F4. Вы также можете открыть меню "Вид " и выбрать окно свойств .

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

  4. В свойстве Configuration нажмите кнопку выбора (...).

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

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

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

    Это важно

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

  7. Выберите Получить.

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

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

    В столбце "Значение " условия теста отображается значение ожидаемой контрольной суммы.

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

После добавления условия теста ожидаемой схемы в модульный тест SQL Server необходимо настроить ожидаемую схему с помощью следующей процедуры:

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

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

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

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

  4. В свойстве Configuration нажмите кнопку выбора (...).

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

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

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

    Это важно

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

  7. Выберите Получить.

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

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

    В столбце "Значение " условия теста отображаются сведения о ожидаемой схеме. Например, он может сказать "Ожидается: 2 таблицы".

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

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