【问题标题】:How to re-deploy, re-create database on each test run如何在每次测试运行时重新部署、重新创建数据库
【发布时间】:2026-01-12 07:00:02
【问题描述】:

目前我正在使用 Visual Studio 2012 RC 和 SQL Server 2012 RTM。

我想知道如何为每次测试运行重新部署/重新创建测试数据库。

请记住,我有一个使用 Visual Studio 2012 模板的数据库的 SQL Server 数据库项目。

其实我不是很确定我的想法,但 .testsettings 文件有 设置和清理脚本。这是要走的路吗?例如,一个 PowerShell 脚本读取数据库项目生成的脚本并针对数据库执行它?

我想有更好的方法可以做到这一点,它应该是一个开箱即用的解决方案,但我忽略了它,Google 并不能帮助我找到正确的解决方案。

【问题讨论】:

  • 您想针对 SQL Server 还是针对 LocalDB 进行部署和测试?如果您每次都在重建,我建议您针对 LocalDB 进行测试。另外,您是否使用 TFS 或其他东西作为构建代理? “运行所有测试”是指手动选择运行所有测试,还是某种形式的自动化(即在每次构建、CI、门控签入等之后)?
  • @aclear16 我想针对 SQL Server 进行部署。目前,它不是用于 TFS Build,而是用于手动执行有序测试。

标签: visual-studio mstest visual-studio-2012 sql-server-2012


【解决方案1】:

如前所述,您可能希望使用 VS 2012 .Local.testsettings > 设置和清理脚本来创建/拆除 SQL Server 数据库。

对于脚本,您可能希望将 powershell 与 .dacpac(而不仅仅是 T-SQL 脚本)一起使用,因为您使用的是 SSDT 项目。这是一些示例代码的link - 特别是您可能想查看“Deploy-Dac”命令。

如果您不熟悉 .dacpacs 作为 SSDT 创建的数据库项目的(构建)输出,请查看此参考资料link

【讨论】:

  • 谢谢,我试试看。让我看看你的指示:)
  • 可以将 PowerShell 脚本作为设置和清理脚本直接启动吗?
  • 例如,您如何看待 aclear16 的 LocalDB 方法(请参阅他在问题本身中的评论)。
【解决方案2】:

编辑:虽然这不能以普通的 SQL Server 方式回答问题,但一种简单的实体框架方法如下:我发现我可以使用 DbContext.Database 每次正确地创建和销毁我的数据库。测试的设置和清理阶段中的 CreateIfNotExists() 和 DbContext.Database.Delete() 方法。

【讨论】:

  • 嗯,那是你使用 EF 的时候 :)
  • 好吧,实际上,您为未来的访问者添加了此信息很有用! +1 ;)
【解决方案3】:

最快的解决方案虽然有点小技巧,但非常简单。您可以将调试选项卡下的 DB Projects 属性设置为“始终重新创建 DB”。然后单击两次进行测试,进行调试/构建,然后运行所有测试。您应该在 localDB 上获得一个新构建的数据库,供您运行测试。您还可以将调试数据库的目标(同样是数据库项目属性)更改为您想要的任何内容,以便您可以部署到 .dacpac 或现有的 SQL 数据库或任何地方。这意味着分两步进行测试,如果你的构建很长,可能会很烦人,但它确实有效。否则,我相信脚本是您唯一的选择。

【讨论】:

    最近更新 更多