Visual Studio 中的 SQL Server 单元测试 - DROP DATABASE [MyDb]
SQLServer UnitTesting in Visual Studio - DROP DATABASE [MyDb]
我在 Visual studio 中为我的 SQL 服务器项目设置了一个单元测试项目。
测试本身有效,设置包括部署该数据库。我的问题是我想进行“全新”测试,每次 运行 测试时,数据都会累积。
我尝试从 SqlDatabaseSetup.cs 手动调用 'DROP DATABASE',但此时我似乎没有 DataConnection。
[TestClass()]
public class SqlDatabaseSetup
{
[AssemblyInitialize()]
public static void InitializeAssembly(TestContext ctx)
{
var q = ctx.DataConnection.CreateCommand();
q.CommandText = "DROP DATABASE MyDb;";
q.ExecuteNonQuery();
// Setup the test database based on setting in the
// configuration file
SqlDatabaseTestClass.TestService.DeployDatabaseProject();
SqlDatabaseTestClass.TestService.GenerateData();
}
}
是否有任何指示应该首先刷新数据库(无需为每个 table 手动调用 DELETE FROM XX),或者我可以通过命令为我执行此操作的方法吗?
解决方法如下:
[AssemblyInitialize()]
public static void InitializeAssembly(TestContext ctx)
{
// Setup the test database based on setting in the
// configuration file
try
{
var conn = SqlDatabaseTestClass.TestService.OpenExecutionContext();
var cmd = conn.Connection.CreateCommand();
cmd.CommandText = "use master; ALTER DATABASE [MyTestDb] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;DROP DATABASE MyTestDb;";
cmd.ExecuteNonQuery();
}
catch
{
}
SqlDatabaseTestClass.TestService.DeployDatabaseProject();
SqlDatabaseTestClass.TestService.GenerateData();
}
我在 Visual studio 中为我的 SQL 服务器项目设置了一个单元测试项目。
测试本身有效,设置包括部署该数据库。我的问题是我想进行“全新”测试,每次 运行 测试时,数据都会累积。
我尝试从 SqlDatabaseSetup.cs 手动调用 'DROP DATABASE',但此时我似乎没有 DataConnection。
[TestClass()]
public class SqlDatabaseSetup
{
[AssemblyInitialize()]
public static void InitializeAssembly(TestContext ctx)
{
var q = ctx.DataConnection.CreateCommand();
q.CommandText = "DROP DATABASE MyDb;";
q.ExecuteNonQuery();
// Setup the test database based on setting in the
// configuration file
SqlDatabaseTestClass.TestService.DeployDatabaseProject();
SqlDatabaseTestClass.TestService.GenerateData();
}
}
是否有任何指示应该首先刷新数据库(无需为每个 table 手动调用 DELETE FROM XX),或者我可以通过命令为我执行此操作的方法吗?
解决方法如下:
[AssemblyInitialize()]
public static void InitializeAssembly(TestContext ctx)
{
// Setup the test database based on setting in the
// configuration file
try
{
var conn = SqlDatabaseTestClass.TestService.OpenExecutionContext();
var cmd = conn.Connection.CreateCommand();
cmd.CommandText = "use master; ALTER DATABASE [MyTestDb] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;DROP DATABASE MyTestDb;";
cmd.ExecuteNonQuery();
}
catch
{
}
SqlDatabaseTestClass.TestService.DeployDatabaseProject();
SqlDatabaseTestClass.TestService.GenerateData();
}