Удаление тестовой базы данных во время очистки модульного теста

Я работаю над некоторыми автоматизированными тестами (используя 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 чтобы убедиться, что незавершенные прогоны не влияют на следующий метод испытаний

Другие вопросы по тегам