Unit testing 如何在SSDT单元测试中部署数据,但仅针对单元测试

Unit testing 如何在SSDT单元测试中部署数据,但仅针对单元测试,unit-testing,deployment,sql-server-data-tools,Unit Testing,Deployment,Sql Server Data Tools,我已经成功地开始为最近的存储过程更改编写SSDT单元测试。我注意到的一件事是,我最终为许多测试创建了类似的测试数据。这向我建议,我应该在部署期间创建一组测试数据,作为部署后的一个步骤。然后,这些数据将可用于所有后续测试,并且不再需要长时间创建测试前脚本。给定单元测试特有的数据将保留在测试前脚本中 问题在于,部署后脚本不仅在单元测试部署期间运行,而且在部署到真实环境期间也会运行。是否有办法使部署后步骤(或部分步骤)仅在SSDT单元测试的部署期间运行 我已经看到app.config中的测试设置包括要

我已经成功地开始为最近的存储过程更改编写SSDT单元测试。我注意到的一件事是,我最终为许多测试创建了类似的测试数据。这向我建议,我应该在部署期间创建一组测试数据,作为部署后的一个步骤。然后,这些数据将可用于所有后续测试,并且不再需要长时间创建测试前脚本。给定单元测试特有的数据将保留在测试前脚本中

问题在于,部署后脚本不仅在单元测试部署期间运行,而且在部署到真实环境期间也会运行。是否有办法使部署后步骤(或部分步骤)仅在SSDT单元测试的部署期间运行

我已经看到app.config中的测试设置包括要部署的数据库项目配置。但我不知道如何使不同的配置使用不同的SQLCMD变量


我还看到,我们可以在发布配置文件中设置不同的SQLCMD变量,但我看不到app.config中的单元测试设置如何引用不同的发布配置文件。

您可以使用IF语句,选中@SERVERNAME并仅在单元测试服务器上运行单元测试代码,对其他环境使用相同类型的测试。

或者,您可以在TFS生成定义中使用生成编号。如果构建包含子字符串“test”,则可以执行测试代码,否则不执行。然后确保在所有生成中设置适当的生成编号。

查看.sqlproj文件的内容-查看如何使用不同设置设置“Debug”和“Release”属性组。您可以添加一个“测试”配置,在这种情况下,SQLCMD变量的默认值与Debug/Release不同。然后在“单元测试配置”对话框中将配置设置为“测试”。@Kevincunne:我本来会这样做的,但我过去在进行Visual Studio UI不支持的项目更改时有过不好的经历。这些更改在过去已经丢失,因为这些更改没有反映在VisualStudio的项目对象模型中。这是一个可维护性问题-为了理解该变量,有必要读取.sqlproj文件。但是UI中没有任何迹象表明有任何理由去读取.sqlproj文件!我明白——这就是为什么我要发表评论而不是完整的回答。这是解决您的问题的一个解决方案,但不是理想的解决方案…如何从测试中访问内部版本号?我在SQL中使用SQLCMD变量,例如$(变更集)和$(版本号)。我想您也可以这样做,也许您需要一个文件或表作为中间存储。