单元测试后无法删除数据库

Dan*_*ler 5 database connection nunit

答案:我没有清理我的ConnectionPools.

解决的方案是:

建立:

  1. 检查本地实例上是否存在"TEMP_NUnit"数据库(SQL Server 2005)
  2. 如果存在,请将其丢弃.
  3. 创建一个名为"TEMP_NUnit"的新空白数据库.

测试:

  1. 实例化"升级数据库"组件.
  2. 检查组件的基本属性是否正确默认.
  3. 将组件指向空白数据库并调用.Upgrade()
  4. 检查升级是否真的有效

拆除:

  1. SqlConnection.ClearAllPools();
  2. 删除'TEMP_NUnit'数据库.

原始问题在首页.


大家好

测试场景是:

建立:

  1. 检查本地实例上是否存在"TEMP_NUnit"数据库(SQL Server 2005)
  2. 如果存在,请将其丢弃.
  3. 创建一个名为"TEMP_NUnit"的新空白数据库.

测试:

  1. 实例化"升级数据库"组件.
  2. 检查组件的基本属性是否正确默认.
  3. 将组件指向空白数据库并调用.Upgrade()
  4. 检查升级是否真的有效

拆除:

  1. 删除'TEMP_NUnit'数据库.

一切都很顺利,直到我进入TearDown阶段.我总是得到以下错误:

无法删除数据库"TEMP_NUnit",因为它当前正在使用中.

这让我感到困惑,因为我正在关闭(在finally语句中显式调用conn.Close)并正确地处理(通过using语句)我的所有DbConnection对象.在TearDown到来之前,"TEMP_NUnit"数据库中不应该有任何运行.

如果我关闭NUnit然后重新打开它,SetUp的第2步总是先行.

我不确定我在这里做错了什么.任何指向正确的方向将不胜感激.

Igo*_*aka 5

啊,但在删除数据库之前你忘了做这件小事:

SqlConnection.ClearAllPools();
Run Code Online (Sandbox Code Playgroud)

By default the connection pool will maintain a connection to the database, even if you closed it before. Doing SqlConnection.ClearAllPools() will actually force all connections to be closed. You can then connect to master and drop the temp database.

It has caused me quite an amount of grief before :)