使用作为 TFS SQL 项目一部分的数据库实施 tSQLt 框架

Implement tSQLt Framework with database which is part of TFS SQL Project

环境

场景

问题

您认为不应将 tSQLt 框架或相关的单元测试部署到生产中是正确的。

您正在寻找的解决方案是复合项目。您的解决方案大概已经有一个包含您所有代码的数据库项目——例如,称为 MyDb。您需要将另一个数据库项目添加到同一解决方案 - 您可以将其称为 MyDb.tests(尽管名称并不重要)。第二个数据库将保存 tSQLt 框架和所有测试。这是一个非常快速的步骤:

  1. 在您的沙盒上创建一个名为 MyDb.tests 的空数据库并添加 此数据库的 tSQLt 框架
  2. 在 Visual Studio 中,将 MyDb.tests 中的 tSQLt 对象导入到 在您的解决方案中新建 MyDb.tests 数据库项目。或者你 可以创建 tSQLt 数据库的 dacpac 并引用它。 就个人而言,在导入时,我通常选择按以下方式对对象进行分组 这样的架构然后通过测试 class.
  3. 很好地对您的项目进行排序
  4. 还是在Visual Studio,在MyDb.tests,添加数据库引用到 "master" 然后将另一个数据库引用添加到您的 MyDb 数据库 解决方案中的项目。确保您指定相同的服务器,相同 数据库。开始向 MyDb.tests 添加测试,同时继续 在 MyDb 中编写生产代码。
  5. 当您构建或发布 MyDb.Tests 到您的沙箱时,生成的 数据库将包括 tSQLt 框架、您的测试和所有 来自 MyDb 的对象和代码。
  6. 在 MyDb.tests 中,您甚至可以添加一个 post-部署脚本,它 包括对 tSQLt.RunAll 的调用,以便您的所有测试都是 运行 每次重新发布 MyDb.tests 项目时。

当您部署到测试、UAT 或生产环境时,您只需从 MyDb 项目构建和发布,none 的 tSQLt 框架或测试将包含在内。

除此之外还有更多内容 - 特别是如果您更喜欢在 SSMS 中开发然后将您的对象导入回 Visual Studio 但这里有几个链接可能会有所帮助:

https://kzhendev.wordpress.com/2014/01/08/setting-up-ssdt-database-projects-and-tsqlt/

https://www.red-gate.com/simple-talk/sql/sql-tools/sql-server-data-tools-ssdt-and-database-references/