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


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

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

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

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

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

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

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

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

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

Дополнительные сведения о различных контекстах безопасности, в которых выполняются каждый из этих скриптов, см. в разделе "Обзор строк подключения и разрешений". Вы также можете просмотреть и раздел разрешений модульного тестирования 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 для создания вспомогательной хранимой процедуры, выполняемой позже в скрипте теста, для тестирования другой хранимой процедуры.

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

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