Удаление тестовой базы данных во время очистки модульного теста
Я работаю над некоторыми автоматизированными тестами (используя MSTest), которые создают уникальную базу данных для каждого тестового случая, изолируя каждый тест от результатов предыдущих тестов (и тестовых прогонов). Я использую инструменты Microsoft DACFx для достижения этой цели. Как я могу удалить тестовую базу данных во время очистки теста, чтобы не накапливать огромную коллекцию? Экземпляр SQL Server работает на localhost
,
Я просмотрел документацию DACFx и не смог найти способ удалить всю базу данных.
Это код, который я использую для создания базы данных, и было бы неплохо, если бы был способ удалить его в коде, а не выполнять сценарий SQL:
using (var dacpac = DacPackage.Load(path)) {
instance.Deploy(dacpac, databaseName, upgradeExisting: true);
}
1 ответ
Я делаю то же самое с созданием тестовой базы данных в 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
чтобы убедиться, что незавершенные прогоны не влияют на следующий метод испытаний