Скрипты в модульных тестах SQL Server

 

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

  • скрипт Transact-SQL, выполняющийся в базе данных;

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

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

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

Помимо этих трех действий есть также два скрипта (так называемые общие скрипты), которые выполняются до и после проведения модульного теста SQL Server.В итоге при проведении одного модульного теста Transact-SQL могут выполняться до пяти скриптов SQL Server.Обязательным является только скрипт Transact-SQL, который содержится в тестовом действии. Использовать общие скрипты и скрипты действий, выполняемых до и после теста, не обязательно.

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

Действие

Тип скрипта

Описание

TestInitialize

Общий скрипт (инициализация)

(Необязательно) Этот скрипт предшествует всем действиям, выполняемым до и во время модульного теста.Скрипт TestInitialize выполняется перед каждым модульным тестом в данном классе теста.Этот скрипт выполняется с помощью привилегированного контекста.

Предварительный тест

Тестовый скрипт

(Необязательно) Этот скрипт является частью модульного теста.Скрипт, выполняемый перед тестом, запускается до тестового действия в рамках каждого модульного теста.Этот скрипт выполняется с помощью привилегированного контекста.

Тест

Тестовый скрипт

(Обязательно) Этот скрипт является частью модульного теста.Например, этот скрипт может запустить хранимую процедуру, которая возвращает, вставляет или обновляет значения таблицы.Этот скрипт выполняется с помощью контекста выполнения.

Дополнительный тест

Тестовый скрипт

(Необязательно) Этот скрипт является частью модульного теста.Такой скрипт выполняется после отдельного модульного теста.Этот скрипт выполняется с помощью привилегированного контекста.

TestCleanup

Общий скрипт (очистка)

(Необязательно) Этот скрипт следует за модульным тестом.Скрипт TestCleanup выполняется после каждого модульного теста в данном классе теста.Этот скрипт выполняется с помощью привилегированного контекста.

Дополнительные сведения о разных контекстах безопасности, в которых выполняется каждый из этих скриптов, см. в разделе Общие сведения о строках подключения и разрешениях, а также в разделе разрешения для тестирования блоков баз данных SQL Server статьи Разрешения, необходимые для запуска SQL Server Data Tools.

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

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

Два теста модуля базы данных

System_CAPS_noteПримечание

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

Скрипты инициализации и очистки

В конструкторе модульных тестов SQL Server скрипты TestInitialize и TestCleanup называются общими скриптами.В приведенном примере предполагается, что эти два модульных теста принадлежат к одному классу тестов.В результате чего в них используются одинаковые скрипты TestInitialize и TestCleanup.Так всегда происходит во всех модульных тестах из одного класса тестов.Однако если в рамках сеанса тестирования выполняются модульные тесты из разных классов тестов, то до и после проведения модульного теста запускаются общие скрипты для соответствующего класса тестов.

Если при написании модульных тестов используется только конструктор модульных тестов SQL Server, необходимо ознакомиться с основными понятиями класса тестов.Каждый раз, когда создается модульный тест с помощью команды Создать тест из меню Тест, SQL Server Data Tools формирует класс тестов.Классы тестов отображаются в обозревателе решений под указанным пользователем именем теста с расширением CS или VB.Отдельные модульные тесты хранятся в каждом классе тестов как методы тестирования.Однако независимо от количества методов тестирования (то есть модульных тестов) каждый класс тестов может иметь по одному скрипту TestInitialize и TestCleanup или не иметь таких скриптов вовсе.

С помощью скрипта TestInitialize можно готовить тестовую базу данных, а с помощью скрипта TestCleanup эту базу данных можно вернуть в известное состояние.Например, с помощью скрипта TestInitialize можно создать вспомогательную хранимую процедуру, которая будет запущена позднее в тестовом скрипте для тестирования другой хранимой процедуры.

Скрипты, выполняемые до и после теста

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

См. также

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