Использование условий теста в модульных тестах базы данных
В типичном модульном тесте базы данных выполняется скрипт теста Transact-SQL, возвращающий экземпляр класса ExecutionResult. Этот экземпляр содержит объект DataSet, время выполнения и затронутые скриптом строки. Все эта информация собирается при выполнении скрипта. Эти результаты можно оценить в скрипте Transact-SQL с использованием функции RAISERROR или условий теста. Visual Studio Premium предоставляет для использования набор предопределенных условий теста.
Предопределенные условия теста
В следующей таблице перечислены предопределенные условия теста, которые можно добавлять с использованием области «Условия теста» в конструкторе модульных тестов базы данных.
Условие теста |
Описание условия теста |
---|---|
Контрольная сумма данных |
Завершается неудачей, если контрольная сумма результирующего набора, возвращаемого из скрипта Transact-SQL, не соответствует ожидаемой. Дополнительные сведения см. в разделе Задание контрольной суммы данных.
Примечание
Это условие теста не рекомендуется, если возвращаются данные, которые будут изменяться в зависимости от тестового запуска.Например, если результирующий набор содержит созданные даты и время или содержит столбцы идентификаторов, тесты вернут ошибку, так как контрольная сумма будет другой при каждом выполнении.
|
Пустой набор результатов |
Завершается неудачей, если результирующий набор, возвращенный из скрипта Transact-SQL, не пустой. |
Время выполнения |
Завершается неудачей, если выполнение скрипта теста Transact-SQL происходит дольше, чем ожидалось. По умолчанию время выполнения составляет 30 секунд. Время выполнения применяется только к скриптам теста, но не к скриптам, выполняемым до или после тестирования. |
Ожидаемая схема |
Завершается неудачей, если столбцы и типы данных результирующего набора не соответствуют указанным для условия теста. Необходимо задать схему с использованием свойств условия теста. Дополнительные сведения см. в разделе Задание ожидаемой схемы. |
С неопределенным результатом |
Всегда создает тест с результатом «С неопределенным результатом». Это условие по умолчанию, добавляемое в каждый тест. Это условие теста включается для указания на то, что проверка теста еще не реализована. После добавления других условий теста удалите это условие. |
Набор результатов не пуст |
Завершается неудачей, если результирующий набор не пуст. Это условие теста или EmptyResultSet может использоваться с функцией Transact-SQL @@RAISERROR в скрипте теста для проверки правильности работы обновления. Например, можно сохранить значения перед обновлением, выполнить обновление, сравнить значения после обновления и сгенерировать ошибку, если получены результаты, не соответствующие ожидания. |
Число строк |
Завершается неудачей, если результирующий набор не содержит ожидаемого числа строк. |
Скалярное значение |
Завершается неудачей, если определенное значение в результирующем наборе не равно заданному значению. Значением по умолчанию для Ожидаемое значение является null. |
Примечание
Условие теста "Время выполнения" задает лимит времени выполнения скрипта Transact-SQL.Если это время истекло, тест завершается неудачей.Результаты теста включают также статистику «Длительность», которая отличается от условия теста «Время выполнения».Статистика «Длительность» включает не только время выполнения, но и время на подключения к базе данных дважды, время выполнения любых других скриптов теста, таких как скрипты, выполняемые до и после тестирования, и время выполнения условий теста.Поэтому тест может быть пройден, даже если его длительность превышает время выполнения.
Возвращаемая длительность не включает время, затраченное на создание данных и развертывание схемы, поскольку эти действия производятся до выполнения тестов.Для просмотра длительности теста выберите в окне Результаты проверки тестовый запуск, щелкните его правой кнопкой мыши и выберите команду Просмотреть подробные результаты теста.
Условия теста можно добавить в модульные тесты бы с использованием области «Условия теста» в конструкторе модульных тестов базы данных. Дополнительные сведения см. в разделе Практическое руководство. Добавление условий теста в модульные тесты базы данных.
Можно также отредактировать код метода теста непосредственно, чтобы добавить дополнительные функции. Дополнительные сведения см. в разделах Практическое руководство. Открытие модульного теста базы данных для изменения и Практическое руководство. Написание модульного теста базы данных и тестовых запусков в области одной транзакции. Например, можно расширить функции тестового метода, добавив инструкции Assert. Дополнительные сведения см. в разделе Использование утверждений Transact-SQL в модульных тестах базы данных.
Ожидаемые ошибки
Можно создать модульные тесты базы данных, чтобы тестировать поведение, которое не должно реализоваться успешно. Эти ожидаемые ошибки иногда называют отрицательными тестами. Ниже следуют некоторые примеры этого.
Проверка того, что хранимая процедура, которая удаляет данные клиента, возвращает ошибку, если указан недопустимый идентификатор клиента.
Проверка того, что хранимая процедура, которая заполняет заказы, возвращает ошибку, если заказ не размещался или если заказ уже заполнен.
Проверка того, что хранимая процедура, которая отменяет заказ, не может отменить выполненные или уже отмененные заказы
Вы можете определить модульные тесты базы данных для хранимых процедур, которые возвращают ожидаемые SQL-исключения. Можно добавить в метод модульного теста атрибут, чтобы указать, какие исключения ожидаются. Таким образом можно предотвратить ошибку теста в случае исключения.
Чтобы пометить метод модульного теста базы данных ожидаемыми исключениями, добавьте следующий атрибут:
[ExpectedSqlException(MessageNumber = nnnnn, Severity = x, MatchFirstError = false, State = y)]
где
nnnnn - это номер ожидаемого сообщения, например, 14025
x - это сложность ожидаемого исключения
y - это состояние ожидаемого исключения
Любые незаданные параметры пропускаются. Эти параметры передаются в инструкцию RAISERROR в коде базы данных. Если параметр MatchFirstError получает значение false, атрибут будет соответствовать любой ошибке SQL в исключении. Поведение по умолчанию (MatchFirstError = true) - только соответствие первой ошибке, которая происходит.
Примеры использования ожидаемых исключений и отрицательных модульных тестов базы данных см. в разделе Пошаговое руководство. Создание и выполнение модульного теста базы данных.
Задание контрольной суммы данных
После добавления условия теста "Контрольная сумма данных" к модульному тесту базы данных необходимо настроить ожидаемую контрольную сумму с использованием следующей процедуры:
Задание ожидаемой контрольной суммы
В списке условий теста щелкните условие теста "Контрольная сумма данных", для которого необходимо задать контрольную сумму.
Нажмите клавишу F4, чтобы открыть окно Свойства. Можно также открыть меню Представление и выбрать окно Свойства.
Можно также изменить свойство (Имя) условия теста, чтобы сделать его более описательным (необязательно).
В свойстве Конфигурация нажмите кнопку обзора (...).
Откроется диалоговое окно Конфигурация для Имя_условия_теста.
Задайте подключение к базе данных, которую необходимо тестировать. Дополнительные сведения см. в разделе Практическое руководство. Создание подключения к базе данных.
По умолчанию основной текст Transact-SQL теста отображается в области редактирования. Если необходимо, можно изменить код, чтобы получать ожидаемые результаты. Например, если тест включает код, исполняемый до тестирования, может понадобиться добавить этот код.
Важно!
Если изменяется условие контрольной суммы, для которого уже была задана контрольная сумма, любые изменения, выполненные в области редактирования, не сохраняются.Эти изменения необходимо вносить повторно до нажатия кнопки Извлечь.
Нажмите Извлечь.
Код Transact-SQL выполняется для заданного подключения базы данных, и результаты отображаются в диалоговом окне.
Если результаты соответствуют ожидаемым результатам теста, нажмите кнопку ОК. В противном случае измените код Transact-SQL и повторите шаги 6, 7 и 8, пока не будут получены ожидаемые результаты.
В столбце Значение условия теста отображается значение ожидаемой контрольной суммы.
Задание ожидаемой схемы
После добавления условия теста "Ожидаемая схема" к модульному тесту базы данных необходимо настроить ожидаемую схему с использованием следующей процедуры:
Задание ожидаемой схемы
В списке условий теста щелкните условие теста "Ожидаемая схема", для которого необходимо задать схему.
Нажмите клавишу F4, чтобы открыть окно Свойства. Можно также открыть меню Представление и выбрать окно Свойства.
Можно также изменить свойство (Имя) условия теста, чтобы сделать его более описательным (необязательно).
В свойстве Конфигурация нажмите кнопку обзора (...).
Откроется диалоговое окно Конфигурация для Имя_условия_теста.
Задайте подключение к базе данных, которую необходимо тестировать. Дополнительные сведения см. в разделе Практическое руководство. Создание подключения к базе данных.
По умолчанию основной текст Transact-SQL теста отображается в области редактирования. Если необходимо, можно изменить код, чтобы получать ожидаемые результаты. Например, если тест включает код, исполняемый до тестирования, может понадобиться добавить этот код.
Важно!
Если изменяется условие ожидаемой схемы, для которого уже была задана схема, любые изменения, выполненные в области редактирования, не сохраняются.Эти изменения необходимо вносить повторно до нажатия кнопки Извлечь.
Нажмите Извлечь.
Код Transact-SQL выполняется для заданного подключения базы данных, и результаты отображаются в диалоговом окне. Так как вы проверяете схему или форму результирующего набора, а не значения результатов, не нужно просматривать данные в возвращенных результатах, пока столбцы отображаются так, как они должны отображаться.
Если результаты соответствуют ожидаемым результатам теста, нажмите кнопку ОК. В противном случае измените код Transact-SQL и повторите шаги 6, 7 и 8, пока не будут получены ожидаемые результаты.
В столбце Значение условия теста отображаются сведения об ожидаемой схеме. Например, это может быть "Ожидается: 2 таблицы".
Расширяемые условия теста
В дополнение к шести предопределенным условиям теста можно самостоятельно писать новые. Эти условия теста будут отображены в области «Условия теста» в конструкторе модульных тестов базы данных. Дополнительные сведения см. в разделе Практическое руководство. Создание условий теста для конструктора модульных тестов базы данных.
См. также
Основные понятия
Использование утверждений Transact-SQL в модульных тестах базы данных