2

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

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

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

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

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

谢谢。

4

2 回答 2

5

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

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

顺便说一句,我之前在博客上写过我在使用 insert..exec 和 SP 时遇到的一些意外行为,这些 SP 返回多个相同的结果集,这可能是有趣的。

于 2014-03-13T05:35:01.750 回答
4

戴夫格林有答案。但为了完整起见,我想分享这个扩展了基础知识: 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 指定返回的第二个结果集。

漂亮又活泼... ;-)

于 2014-03-14T18:01:34.090 回答