2017-10-11 54 views
1

环境实现tSQLt框架与数据库是SQL TFS项目

  • SQL Server的一部分 - 的IaaS。

  • TFS部署建立和SQL文件部署到相应的数据库

方案

  • 我有一个TFS SQL项目为我的数据库。我们在TFS SQL Project中进行更改,并使用TFS构建部署这些更改。

  • TFS Build通过比较我的 数据库和TFS SQL Project来生成差异脚本.TFS Build生成特定于环境的脚本。

  • 基本上,如果对象是不存在于数据库中,但在SQL项目存在,那么它就会产生创建报表,如果对象是存在于数据库中,但在SQL项目缺少那么它将 生成掉落语句

问题

  • 我想用我的数据库实现tSQLt框架。通过考虑上述场景,我们可以遵循哪些最佳实践?

  • 基本上 - 如果我们在SQL项目中创建对象,那么我们将部署这些tsqlt对象直到PROD。哪种做法不好?

+0

你是在谈论TFS SQL或SSDT项目(Visual Studio中的简单数据库项目)?我不确定TFS SQL是什么意思...... –

+0

这是SSDT项目(Visual Studio的数据库项目) –

+0

@datacentricity已经给出正确答案了 –

回答

2

如果您认为您不应该将tSQLt框架或相关的单元测试部署到生产环境中,那么您是正确的。

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

  1. 在沙箱称为MyDb.tests创建一个空数据库,并添加 的tSQLt框架,这个数据库
  2. 在Visual Studio中,导入从MyDb.tests的tSQLt对象到您的解决方案中的新的MyDb.tests数据库项目中。或者,您可以创建tSQLt数据库的dacpac并引用该数据库。 个人而言,在导入时,我通常选择按 架构对对象进行分组,因为这样可以很好地按照测试类对项目进行排序。
  3. 仍然在Visual Studio中,在MyDb.tests中,将数据库引用添加到 “master”然后将另一个数据库引用添加到您的解决方案中的MyDb数据库 项目。确保你指定了相同的服务器,相同的数据库 。开始向MyDb.tests添加测试,同时继续到 在MyDb中编写您的生产代码。
  4. 当您将MyDb.Tests构建或发布到您的沙盒时,生成的 数据库将包含来自MyDb的tSQLt框架,您的测试和所有 对象和代码。
  5. 在MyDb.tests中,您甚至可以添加一个后期部署脚本,其中 包含对tSQLt.RunAll的调用,以便您每次重新启动MyDb.tests项目时都会运行 。

当您开始部署到测试,UAT或生产时,您只需从MyDb项目构建和发布,并且不包含任何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/

+0

非常感谢。 –

相关问题