在单元测试清理期间删除测试数据库

Removing test database during unit test cleanup

我正在进行一些自动化测试(使用 MSTest),这些测试为每个测试用例创建一个唯一的数据库,将每个测试与先前测试(和测试运行)的结果隔离开来。我正在使用 Microsoft DACFx 工具来完成此操作。如何在测试清理期间删除测试数据库,以免收集大量数据? SQL 服务器实例在 localhost 上 运行。

我查看了 DACFx documentation,但找不到删除整个数据库的方法。

这是我用来创建数据库的代码,如果有一种方法也可以在代码中删除它,而不是通过执行 SQL 脚本:

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

我在 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 期间 运行 此脚本,以确保任何不完整的 运行 不会影响下一个测试方法