访问链接服务器的SSDT和单元测试存储过程

时间:2017-12-27 16:01:26

标签: sql-server visual-studio unit-testing tsql stored-procedures

我正在学习如何使用SSDT测试在SQL Server 2014 Standard上编写的T-SQL代码。我已经使用了以下演练来开始:

https://msdn.microsoft.com/en-us/library/jj851212(v=vs.103).aspx#Create%20a%20Database%20Project%20and%20Import%20a%20Schema

我有几种情况,存储过程访问链接服务器。

  1. 读取本地表并写入链接服务器。
  2. 读取链接服务器并写入本地表。
  3. 从本地表读取数据,写入另一个本地表,将相同数据写入链接服务器(类似于场景#1)。
  4. 我正在使用的链接服务器只有一个测试和生产环境,它提出了几个问题:

    在这些存储过程上编写测试的正确方法是什么? 编辑:删除过于宽泛。

    测试是否应该与链接的服务器交互,或者某种方式是否存在模拟连接(类似于Ruby中的WebMock)?

    为通常从链接服务器读取数据的存储过程设置数据的理想方法是什么?

    编辑:我应该提到链接服务器不是SQL Server实例。

1 个答案:

答案 0 :(得分:0)

答案

  

在这些存储过程上编写测试的正确方法是什么?

要求为存储过程编写测试的“正确”方法相当广泛,因为它主要是主观的,有许多不同的方法。理想情况下,对于每个单元测试,您将有一个脚本来为该特定测试准备和恢复数据库,但我将在本答案的最后提供一些链接,以配置和运行单元测试。

  

测试是否应该与链接的服务器交互,或者某种方式是否存在模拟连接(类似于Ruby中的WebMock)?

通常,测试服务器将与另一个测试服务器链接。测试服务器上的数据通常会从prod刷新。 (或者随机生成)并且如果它有敏感数据则随机化。

最简单/最快捷的方法是备份链接的测试数据库并将其还原为开发环境中的新数据库。然后,将配置开发环境中的链接服务器以引用已还原的数据库。这样,您就不会修改测试环境中的共享数据。这可以作为测试的一部分编写脚本。

  

为通常从链接服务器读取数据的存储过程设置数据的理想方法是什么?

这可以通过以下方式实现:

  1. 安装PostgreSQL ODBC驱动程序。
  2. 为PostgreSQL服务器创建ODBC数据源。
  3. 使用链接服务器的通用(但标识)名称将链接服务器配置为PostgreSQL。
  4. 例如,在新建链接服务器对话框中,您可以为链接服务器字段指定GENERICNAME,无论其名称/ IP是什么服务器是。

    然后您可以读取类似于以下的数据:

    SELECT column FROM GENERICNAME.A;
    SELECT column FROM GENERICNAME.B;
    

    您还可以使用OPENQUERYGENERICNAME作为语法示例linked_server中的OPENQUERY ( linked_server ,'query' )值。

    如果您之前没有这样做过,here是一篇很好的文章,展示了如何使用通用名称连接SQL Server和PostreSQL。

    关于SQL Server单元测试的官方Microsoft指南

    以下是Microsoft文档中的一些链接。请记住,使用通用名称意味着这一切仍然适用,您的存储过程将只使用相同的链接服务器名称,例如GENERICNAME。根据环境,这个引用的实际服务器会有所不同。

    Walkthrough: Creating and Running a SQL Server Unit Test

    How to: Create SQL Server Unit Tests for Functions, Triggers, and Stored Procedures

    How to: Configure SQL Server Unit Test Execution