Скрипты в модульных тестах баз данных
Каждый модульный тест базы данных содержит одно действие, выполняемое перед тестированием, действие теста и действие, выполняемое после тестирования. Для каждого из этих действий, в сою очередь, содержится следующее:
скрипт Transact-SQL, выполняющийся для базы данных;
нуль или более условий теста, оценивающих результаты, возвращенные при выполнении скрипта.
Скрипт теста Transact-SQL в действии теста – это единственный компонент, который необходимо включить в каждый модульный тест базы данных. В дополнение к самому тестовому скрипту вы, вероятно, пожелаете задать условия теста для проверки того, возвратил ли скрипт теста ожидаемое значение или набор значений. Действие теста выполняет или изменяет определенный объект в базе данных и затем оценивает это изменение.
Для каждого действия теста можно включить одно действие, выполняемое перед тестированием, и одно действие, выполняемое после тестирования. Подобно действию теста каждое действие, выполняемое перед тестированием или после тестирования, содержит один скрипт Transact-SQL и одно или несколько условий теста. Можно использовать действие, выполняемое перед тестированием, чтобы проверить, находится ли база данных в состоянии, допускающем выполнение действия теста и возврат значащих результатов. Например, с помощью действия, выполняемого перед тестированием, можно убедиться, что таблица содержит данные, прежде чем с помощь скрипта теста выполнить операцию над этими данными. После того как действие, выполняемое перед тестированием, подготовит базу данных, и действие теста вернет значащие результаты, действие, выполняемое после тестирования, вернет базу данных в состояние, в котором она находилась до выполнения действия, выполняемого перед тестированием. В некоторых случаях можно использовать действие, выполняемое после тестирования, для проверки результатов действия теста. Это возможно благодаря тому, что действие, выполняемое после тестирования, имеет более высокие привилегии в базе данных, нежели действие теста. Дополнительные сведения см. в разделе Общие сведения о строках подключения и разрешениях.
В дополнение к этим трем действиям имеются два скрипта теста (называемые общими скриптами), которые выполняются перед выполнением модульного теста базы данных и после его выполнения. В результате при выполнении одного модульного теста базы данных может выполняться до пяти скриптов Transact-SQL. Только скрипт Transact-SQL, содержащийся в действии теста, является обязательным; общие скрипты и скрипты действий, выполняемых перед тестированием и после тестирования, не являются обязательными.
В следующей таблице приведен полный список скриптов, связанных с модульным тестом базы данных.
Действие |
Тип скрипта |
Описание |
---|---|---|
TestInitialize |
Общий скрипт (инициализация) |
(Необязательно.) Этот скрипт в модульном тесте предшествует действию, выполняемому перед тестированием, и действию теста. Скрипт TestInitialize выполняется перед каждым модульным тестом в заданном тестовом классе. Этот скрипт выполняется с использованием привилегированного контекста. |
Перед тестированием |
Скрипт теста |
(Необязательно.) Этот скрипт является частью модульного теста. Скрипт, выполняемый перед тестированием, выполняется в модульном тесте перед действием теста. Этот скрипт выполняется с использованием привилегированного контекста. |
Тест |
Скрипт теста |
(Обязательно.) Этот скрипт является частью модульного теста. Скрипт теста выполняется по отношению к базе данных. Этот скрипт может, например, выполнить хранимую процедуру, которая получает вставляет или обновляет значения таблицы. Этот скрипт выполняется с использованием контекста выполнения. |
После тестирования |
Скрипт теста |
(Необязательно.) Этот скрипт является частью модульного теста. Скрипт, выполняемый после тестирования, выполняется после отдельного модульного теста. Этот скрипт выполняется с использованием привилегированного контекста. |
TestCleanup |
Общий скрипт (очистка) |
(Необязательно.) Этот скрипт следует за модульным тестом. Скрипт TestCleanup выполняется после всех модульных тестов в заданном тестовом классе. Этот скрипт выполняется с использованием привилегированного контекста. |
Дополнительные сведения о разных контекстах безопасности, в которых выполняется каждый из этих скриптов, см. в разделе Общие сведения о строках подключения и разрешениях и подразделе «Разрешения модульного тестирования базы данных» раздела Разрешения, необходимые для функций баз данных в Visual Studio.
Порядок выполнения скриптов
Важно понимать, в каком порядке выполняются скрипты. Хотя изменить этот порядок нельзя, можно решить, какие скрипты требуется выполнить. Следующая иллюстрация включает выбор скриптов, которые можно использовать в тестовом запуске, содержащем два модульных теста базы данных, и показывает порядок их выполнения.
Примечание
Изменения в создании данных и развертывании базы данных применяются в начале тестового запуска, перед выполнением скриптов.Эти изменения примеряются с помощью строки подключения привилегированного контекста.Дополнительные сведения см. в разделе Практическое руководство. Настройка выполнения модульного теста базы данных.
Скрипты инициализации и очистки
В конструкторе модульных тестов баз данных скрипты TestInitialize и TestCleanup называются общими скриптами. В предыдущем примере предполагается, что два модульных теста являются частями одного и того же тестового класса. В результате они совместно используют скрипты TestInitialize и TestCleanup. Для всех модульных тестов в одном тестовом классе это верно всегда. Однако если текстовый запуск содержит модульные тесты из разных тестовых классов, общие скрипты для связанного тестового класса будут выполняться до и после выполнения модульных тестов.
Если вы пишете модульные тесты только с помощью конструктора модульных тестов базы данных, то можете быть незнакомы с концепцией тестового класса. Каждый раз, когда вы создаете модульный тест, открыв меню Тест и выбрав команду Новый тест, Visual Studio Premium генерирует тестовый класс. Тестовые классы отображаются в обозревателе решений с заданным вами именем теста, за которым следует расширение CS или VB. В каждом тестовом классе отдельные модульные тесты хранятся как методы теста. Однако независимо от количества методов теста (т. е. модульных тестов) каждый тестовый класс имеет не более одного скрипта TestInitialize и TestCleanup.
Скрипт TestInitialize можно использовать для подготовки тестовой базы данных, а TestCleanup — для ее возвращения в известное состояние. Например, с помощью скрипта TestInitialize можно создать в тестовом скрипте вспомогательную хранимую процедуру, которая будет выполнена позднее, для тестирования разных хранимых процедур.
Скрипты, выполняемые перед тестированием и после тестирования
Скрипты, связанные с действиями, выполняемыми перед тестированием и после тестирования, для разны модульных тестов обычно различны. Эти скрипты можно использовать для внесения инкрементальных изменений в базу данных с их последующим удалением.