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

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

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

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

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

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

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

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

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

Дополнительные сведения о контекстах безопасности, в которых выполняются эти скрипты, см. в статье Overview of Connection Strings and Permissions (Общие сведения о строках подключения и разрешениях) и в разделе о разрешениях для модульного теста SQL Server статьи Разрешения, требуемые для запуска SQL Server Data Tools.

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

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

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

Примечание

Если настроено развертывание проекта базы данных 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