【问题标题】:SQL Server Application - Resetting database to original stateSQL Server 应用程序 - 将数据库重置为原始状态
【发布时间】:2016-03-07 09:06:09
【问题描述】:

背景

我需要为 C#/SQL Server 应用程序用 C#(大约 120 个)编写一些集成测试。现在,最初在任何测试之前,数据库已经存在,它存在的原因是因为将运行许多脚本来设置它(大约 20 分钟的运行时间)。现在,当我运行测试时,很少有表会被更新(CRUD 操作)。例如在 10-11 个表中,将添加几行,在 15-16 个表中,将更新几行,在 4-5 个表中将删除几行。

问题

After 运行每个测试,the database 必须是 reset 的原始状态。我怎样才能做到这一点?

糟糕的解决方案

每次运行测试后,re-run 数据库creation scripts(运行时间为 20 分钟)。由于将进行大约 120 次测试,因此需要 40 小时,这不是一个选择。其次,有一个进程对该数据库打开了多个连接,因此无法删除/重新创建数据库。

好的解决方案?

我想知道有没有其他方法可以解决这个问题?我遇到的另一个问题是,对于这些测试中的每一个,我什至不知道将更新哪些表,如果我要删除,我将不得不手动检查是否更新了哪些表,将数据库恢复为通过编写查询手动恢复原始状态。

【问题讨论】:

  • 在开始时进行备份,在每次测试之间恢复?
  • 正如@BugFinder 所说,使用空数据库创建备份并在测试前使用脚本恢复
  • @BugFinder 和 Sebastian - 抱歉,刚刚修改了问题。有一个进程对该数据库打开了多个连接,因此无法删除/重新创建数据库。它也会导致进程终止。
  • 然后使用数据库的测试副本——如果它运行的东西意味着你有实时连接......
  • 请参阅"Should questions include “tags” in their titles?",其中的共识是“不,他们不应该”!

标签: c# .net sql-server integration-testing


【解决方案1】:

您应该看看 MSSQl 为您提供数据库快照的可能性。它可能比恢复到备份或重新创建数据库要快得多。

Managing a test database

在测试环境中,在每轮测试开始时重复运行数据库的测试协议以包含相同的数据时,它会很有用。在运行第一轮之前,应用程序开发人员或测试人员可以在测试数据库上创建数据库快照。每次测试运行后,可以通过还原数据库快照将数据库快速恢复到之前的状态。

【讨论】:

  • 提供一些代码来展示如何实现这一点会很有用。链接会随着时间而改变。
  • 快照不接受数据库写入(插入、更新、删除)。用于非常有限的测试。
猜你喜欢
  • 2018-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多