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

时间:2018-06-05 18:16:24

标签: c# visual-studio-2017 mstest sql-server-2017 dac

我正在进行一些自动化测试(使用MSTest),为每个测试用例创建一个唯一的数据库,将每个测试与先前测试(和测试运行)的结果隔离开来。我正在使用Microsoft DACFx工具来实现这一目标。如何在测试清理过程中删除测试数据库,所以我没有收集大量的集合? SQL Server实例正在localhost上运行。

我浏览了DACFx documentation,找不到任何方法来移除整个数据库。

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

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

1 个答案:

答案 0 :(得分: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期间运行此脚本,以确保所有未完成的运行不会影响下一个测试方法