tSQLt-处理多个SQL Server结果集

nan*_*erd 2 sql-server unit-testing tsqlt

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

我正在测试的proc返回3个结果集。我的webAPI处理多个结果集,然后将其发送给UI。

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

Insert Into @ReturnData
(
 ID, 
 Data1, 
 Data2
)
Exec @Ret = StoreProcName
Run Code Online (Sandbox Code Playgroud)

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

谢谢。

Dav*_*een 5

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

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

顺便说一句,我以前曾写过一篇博客,介绍在将insert..exec与SP一起使用时会遇到的一些意外行为,这些SP返回多个相同的结果集,这可能是您感兴趣的。