运行集成测试时抛出 SqlException [重复]

Posted

技术标签:

【中文标题】运行集成测试时抛出 SqlException [重复]【英文标题】:When run integration tests throw SqlException [duplicate] 【发布时间】:2016-09-06 21:58:39 【问题描述】:

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

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

С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();
    

为什么会出现这个异常?

【问题讨论】:

这是跨多个灯具吗? 看到这里的“大师”把我吓坏了。 【参考方案1】:

我自己没试过,但也许你可以试试这个:

在您的连接字符串中设置 Pooling=false

在删除数据库之前清除池: SqlConnection.ClearAllPools()

"Cannot drop database because it is currently in use". How to fix?

【讨论】:

【参考方案2】:

您遇到此类问题的原因是仍有一些未决连接可能尚未被终止。一种解决方法是在实际删除 DB 之前,按照here 的描述终止所有连接:

ALTER DATABASE Test SET SINGLE_USER WITH ROLLBACK IMMEDIATE

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

【讨论】:

这是一个测试数据库。没有其他用户。我不明白什么可能是一些未决的连接。 那么您的一项测试可能会使连接保持活动状态,或者在服务器设法终止以前的连接之前发生 DROP。是否涉及网络从来都不是很明显。

以上是关于运行集成测试时抛出 SqlException [重复]的主要内容,如果未能解决你的问题,请参考以下文章

来自 Oculus 集成包的 Unity Spatializer,用于在未触及 Unity 时抛出错误

当我运行测试用例时,实体管理器已成功注入,但在运行 Web 应用程序时抛出 NullPointerException

Espresso 在云中的设备上运行时抛出“在视图中执行“单击”时出错”,但相同的测试在本地成功运行

集成时抛出 GitLab Webhook 错误

如何避免在ChannelReader.WaitToReadAsync时抛出InvalidOperationException?

队列为空时抛出测试异常[重复]