2016-09-06 149 views
0

我正在运行集成测试。在开始测试之前,我删除了数据库并重新创建。第一次测试是成功的。但在第二次测试开始时,我得到一个异常:运行集成测试时抛出SqlException

SetUp:System.Data.SqlClient.SqlException:无法删除数据库“测试”,因为它当前正在使用中。

Сode:

[TestFixture] 
class Class1 
{ 
    public SqlConnection Repository; 

    [SetUp] 
    public void LocInit() 
    { 
     Repository = new SqlConnection(@"Data Source=.\SQLEXPRESS; Integrated Security=true;"); 
     Repository.Open(); 
     Repository.Execute("USE master;"); 
     Repository.Execute("DROP DATABASE Test;"); 
     Repository.Execute("USE master; CREATE DATABASE Test;"); 
     Repository.Execute("USE Test;"); 
    } 

    [Test] 
    public void Test1() 
    { 
     using (var repository = new SqlConnection(@"Data Source=.\SQLEXPRESS; Integrated Security=true;")) 
      repository.Execute("USE Test; SELECT 10"); 
    } 

    [Test] 
    public void Test2() 
    { 
     using (var repository = new SqlConnection(@"Data Source=.\SQLEXPRESS; Integrated Security=true;")) 
      repository.Execute("USE Test; SELECT 10"); 
    } 

    [TearDown] 
    public void LocalTearDown() 
    { 
     Repository.Dispose(); 
    } 
} 

为什么我得到这个例外?

+0

这是跨越多个固定装置吗? –

+3

看到这里的'主人'吓坏了我的生活地狱。 –

回答

0

您遇到此类问题的原因是仍然存在一些尚未终止的挂起连接。一个解决办法是杀死所有的连接所描述的here,实际删除DB前:

ALTER DATABASE Test SET SINGLE_USER WITH ROLLBACK IMMEDIATE 

另一个办法是追查为什么会有留下了这样的连接。 This线程显示如何列出到您的数据库的所有连接,并以适当的方式摆脱它。

+0

这是一个测试数据库。没有其他用户。我不明白什么可能是一些挂起的连接。 –

+0

那么您的一个测试可能会使连接处于活动状态,或者在服务器管理终止以前的连接之前发生DROP。如果涉及网络,这一点从未明显。 – Yakuza

相关问题