【问题标题】:tSQLt - Handling multiple SQL Server result setstSQLt - 处理多个 SQL Server 结果集
【发布时间】:2014-03-12 22:52:25
【问题描述】:

我正在使用 tSQLt 创建 SQL Server 单元测试。

我正在测试的 proc 返回 3 个结果集。我的 webAPI 处理多个结果集并将其发送到 UI 很好。

问题:在我的 SQL Server 单元测试中,我如何处理这 3 个结果集?如果proc返回一个结果集,就很容易处理了。我使用以下内容:

Insert Into @ReturnData
(
 ID, 
 Data1, 
 Data2
)
Exec @Ret = StoreProcName

然后我可以对@ReturnData 临时表进行一系列检查。但是如果它返回多个结果集,我不明白如何处理/测试一个过程。这甚至可能吗?

谢谢。

【问题讨论】:

    标签: sql-server unit-testing tsqlt


    【解决方案1】:

    我建议您使用的方法是tSQLt.ResultSetFilter()。这需要一个参数作为要返回的结果集的数量,并调用您的测试代码(在您的示例中为 StoreProcName),返回该结果集,然后您可以使用 Insert..Exec 来捕获它。

    此过程的缺点是每次运行只捕获一个结果集 - 因此您需要多次调用它才能返回所有结果集。我通常每次测试只查看一个结果集,让我专注于回答该测试中的一个问题,但如果您的结果集相互关联并且您需要返回以评估您的测试,那么您需要致电 @987654322 @ 并因此在您的测试中不止一次被测代码(manual 有更多关于这种情况的信息)

    顺便说一句,我之前在博客上写过我在using insert..exec with SPs that return multiple identical result sets 时遇到的一些意外行为,这可能很有趣。

    【讨论】:

      【解决方案2】:

      戴夫格林有答案。但为了完整起见,我想分享这个扩展基础知识:http://tsqlt.org/201/using-tsqlt-resultsetfilter/

      如果调用存储过程需要传入参数,请执行以下操作:

      创建一个@Variable,其中包含嵌入参数值的“exec ...”字符串。然后你可以这样做:

      Declare @Variable Varchar(max)
      Set @Variable = ‘exec STOREDPROCNAME ‘’param1’’, ‘’param2’’’;
      EXEC tSQLt.ResultSetFilter 2, @Variable
      

      数字 2 指定返回的第二个结果集。

      漂亮又活泼... ;-)

      【讨论】:

        猜你喜欢
        • 2018-01-06
        • 2015-12-27
        • 2023-04-05
        • 1970-01-01
        • 2011-04-19
        • 2011-01-31
        • 1970-01-01
        • 2018-08-01
        • 1970-01-01
        相关资源
        最近更新 更多