我正在学习如何使用SSDT测试在SQL Server 2014 Standard上编写的T-SQL代码。我已经使用以下演练开始了:
我有几个场景,存储过程访问链接服务器。
我正在使用的链接服务器只有一个测试和生产环境,它提出了几个问题:
在这些存储过程上编写测试的正确方法是什么? 编辑:删除过于宽泛。
测试是否应该与链接服务器交互,或者是否有某种模拟连接(类似于Ruby中的WebMock)?
为通常从链接服务器读取数据的存储过程设置数据的理想方法是什么?
编辑:我应该提到链接的服务器不是SQL Server实例。
在这些存储过程上编写测试的正确方法是什么?
要求为存储过程编写测试的“正确”方法是相当广泛的,因为它主要是主观的,有许多不同的方法。理想情况下,对于每个单元测试,您将拥有一个脚本来为该特定测试准备和恢复数据库,但我将在本答案的最后提供一些链接,以配置和运行单元测试。
测试是否应该与链接服务器交互,或者是否有某种模拟连接(类似于Ruby中的WebMock)?
通常,测试服务器将与另一个测试服务器链接。测试服务器上的数据通常会从prod刷新。 (或者随机生成)并且如果它具有敏感数据则随机化。
最简单/最快捷的方法是对链接的测试数据库进行备份,并将它们恢复为开发环境中的新数据库。然后,将配置开发环境中的链接服务器以引用已还原的数据库。这样,您就不会在测试环境中修改共享数据。这可以作为测试的一部分编写脚本。
为通常从链接服务器读取数据的存储过程设置数据的理想方法是什么?
这可以通过以下方式完成:
例如,在New Linked Server对话框中,无论服务器的名称/ IP是什么,您都可以为Linked Server字段指定GENERICNAME
。
然后,您可以读取类似于的数据:
SELECT column FROM GENERICNAME.A;
SELECT column FROM GENERICNAME.B;
你也可以使用OPENQUERY
,在语法示例GENERICNAME
中使用linked_server
作为OPENQUERY ( linked_server ,'query' )
值。
如果您之前没有这样做过,here是一篇很好的文章,展示了如何使用通用名称连接SQL Server和PostreSQL。
以下是Microsoft文档中的一些链接。请记住,使用通用名称意味着这一切仍然适用,您的存储过程将只使用相同的链接服务器名称,例如GENERICNAME
。此引用的实际服务器将根据环境而有所不同。
Walkthrough: Creating and Running a SQL Server Unit Test
How to: Create SQL Server Unit Tests for Functions, Triggers, and Stored Procedures