运行集成测试时抛出 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 在云中的设备上运行时抛出“在视图中执行“单击”时出错”,但相同的测试在本地成功运行
如何避免在ChannelReader.WaitToReadAsync时抛出InvalidOperationException?