如何在 SSDT 单元测试中部署数据,但仅适用于单元测试

How to Deploy Data in an SSDT Unit Test but Only for the Unit Test

提问人:John Saunders 提问时间:12/12/2014 更新时间:1/16/2015 访问量:559

问:

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

问题在于,部署后脚本不仅会在单元测试的部署期间运行,还会在部署到实际环境期间运行。有没有办法使部署后步骤(或其中的一部分)仅在 SSDT 单元测试的部署期间运行?

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

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

单元测试 部署 sql-server-data-tools

评论

0赞 Kevin Cunnane 12/13/2014
查看 .sqlproj 文件的内容 - 了解如何使用具有不同设置的“调试”和“发布”属性组。在这种情况下,可以添加“测试”配置,并为 SQLCMD 变量设置不同的默认值,而不是调试/发布。然后在单元测试配置对话框中将配置设置为“测试”。
0赞 John Saunders 12/13/2014
@KevinCunnane:我本来可以尝试的,但我过去在进行 Visual Studio UI 不支持的项目更改时有过糟糕的经历。此类更改在过去已丢失,因为更改未反映在项目的 Visual Studio 对象模型中。这是一个可维护性问题 - 为了理解该变量,必须读取 .sqlproj 文件。但是 UI 中没有迹象表明有任何理由去读取 .sqlproj 文件!
0赞 Kevin Cunnane 12/13/2014
我明白 - 这就是为什么我对此发表评论而不是完整的答案。这是解决您问题的解决方法,但不是理想的解决方案......

答:

1赞 SAS 1/7/2015 #1

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

0赞 SAS 1/16/2015 #2

或者,可以在 TFS 生成定义中使用内部版本号。如果 Build 包含子字符串 'test',则可以执行测试代码,否则不执行。然后,请确保在所有版本中设置适当的内部版本号。

评论

0赞 John Saunders 1/17/2015
如何从测试中访问内部版本号?
0赞 SAS 1/19/2015
我在SQL中使用SQLCMD变量,例如$(ChangeSets)和$(VersionNumber)。我想你可以做同样的事情,也许你需要一个文件或表来进行中间存储。