【发布时间】: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