在单元测试清理期间删除测试数据库
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
期间 运行 此脚本,以确保任何不完整的 运行 不会影响下一个测试方法
我正在进行一些自动化测试(使用 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
期间 运行 此脚本,以确保任何不完整的 运行 不会影响下一个测试方法