2014-03-12 53 views
1

我正在使用tSQLt創建SQL Server單元測試。tSQLt - 處理多個SQL Server結果集

我正在測試的過程返回3個結果集。我的webAPI處理多個結果集並將其發送到UI。

問題:在我的SQL Server單元測試中,如何處理3個結果集?如果proc返回一個結果集,則很容易處理。我使用以下內容:

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

然後我可以針對@ReturnData臨時表運行一堆檢查。但我不明白如何處理/測試一個proc,如果它返回多個結果集。這甚至有可能嗎?

謝謝。

回答

4

我建議你使用的方法是​​。這需要一個參數來返回結果集的編號,並調用您的代碼(例如StoreProcName),返回結果集,然後您可以使用Insert..Exec進行捕獲。

此過程的缺點是它只捕獲每次運行一個結果集 - 因此您需要多次調用它才能返回所有結果集。我通常只考察每個測試中的一個結果集,讓我專注於回答該測試中的一個問題,但如果結果集相互關聯,並且您需要返回測試以進行評估,那麼您需要致電tSQLt.ResultSetFilter並且因此在測試中不止一次的測試代碼(manual有關於這種情況的更多信息)

另外,我曾經在博客中介紹了我在using insert..exec with SPs that return multiple identical result sets時遇到的一些意外行爲,這些行爲可能會引起您的興趣。

3

DaveGreen有答案。但爲了完整,我想分享這其中擴展了基礎: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指定返回的第二個結果集。

不錯,活潑... ;-)