【问题标题】:Respawn is not resetting my SQL Server databaseRespawn 没有重置我的 SQL Server 数据库
【发布时间】:2018-08-29 19:03:44
【问题描述】:

我正在使用Respawn 清理我的测试数据库,但是当此方法执行时:

public static Task ResetCheckpoint() => Checkpoint.Reset(ConfigurationManager.ConnectionStrings["TestConnection"].ConnectionString);

显示此错误消息:

消息:System.InvalidOperationException:无效操作。连接已关闭。

我已经检查了ConfigurationManager.ConnectionStrings["TestConnection"].ConnectionString返回的值,是正确的。

我在这个示例项目中的集成测试结构基于Jimmy Bogardhttps://github.com/jbogard/ContosoUniversityDotNetCore-Pages,更具体地说,这两个类:

【问题讨论】:

  • 您链接的页面上的示例使用await 显示C#。我猜这都是用于异步任务的。也许这是你的问题?像这样:await checkpoint.Reset("MyConnectionStringName");
  • SliceFeature的方法和我的实现一模一样:public static Task ResetCheckpoint() => _checkpoint.Reset(_configuration.GetConnectionString("DefaultConnection"));
  • 此调用中没有等待
  • 但它是异步的,是吗?
  • 是的,它是异步的。我已经弄清楚了,请参阅下面的答案。

标签: c# sql-server integration-testing


【解决方案1】:

我已经想通了。问题是连接超时。我正在使用生产数据库中的克隆作为测试数据库,并且有许多包含很多行的表,其中一些具有数百万个寄存器。因此,我在 SQL Server Management Studio 中手动运行了 Respawn 生成的命令,并花了 17 分钟将其全部清除。现在,我将能够使用干净的数据库编写和运行我的测试,没有任何问题。

所以,这里学到的教训是:

  • 在运行 Respawn Reset 之前清除大型数据库,或将 Checkout 类的 CommandTimeout 属性设置为更高的值。

我认为 Respawn 可以更好地返回 Reset 中出现问题的信息,也许我会发送一个拉取请求来解决这个问题。

【讨论】:

  • 我必须添加如下内容:var cn = new SqlConnectionStringBuilder(connectionString); cn.ConnectTimeout = 60; checkpoint.Reset(cn.ToString());
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多