Удаление тестовой базы данных во время очистки модульного теста - PullRequest
0 голосов
/ 05 июня 2018

Я работаю над некоторыми автоматизированными тестами (используя MSTest), которые создают уникальную базу данных для каждого теста, изолируя каждый тест от результатов предыдущих тестов (и тестовых прогонов).Я использую инструменты Microsoft DACFx для достижения этой цели.Как я могу удалить тестовую базу данных во время очистки теста, чтобы не накапливать огромную коллекцию?Экземпляр SQL Server работает на localhost.

. Я просмотрел документацию DACFx и не смог найти способ удалить всю базу данных.

Этокод, который я использую для создания базы данных, и было бы неплохо, если бы существовал способ удалить его в коде, а не выполнять сценарий SQL:

using (var dacpac = DacPackage.Load(path)) {
    instance.Deploy(dacpac, databaseName, upgradeExisting: true);
}

1 Ответ

0 голосов
/ 05 июня 2018

Я делаю то же самое с созданием тестовой базы данных в TestInitialize и последующим ее удалением во время TestCleanup.Для меня, однако, база данных всегда называется «UnitTesting».Вы можете использовать некоторую подстановку строк, если ваши уникальные имена генерируются в коде C #

В TestCleanup Я выполняю этот скрипт

USE [master];

DECLARE @kill varchar(8000) = '';  
SELECT @kill = @kill + 'kill ' + CONVERT(varchar(5), session_id) + ';'   FROM sys.dm_exec_sessions WHERE database_id  = db_id('UnitTesting')

EXEC(@kill);

/****** Object:  Database [UnitTesting]    Script Date: 12/05/2018 23:06:16 ******/
USE [master]

IF EXISTS(SELECT * FROM SYS.DATABASES WHERE NAME = 'UnitTesting')
    DROP DATABASE [UnitTesting]

Вы также можете запустить этот скрипт во время TestInitializeчтобы убедиться, что незавершенные прогоны не влияют на следующий метод испытаний

...