2017-02-27 27 views
0

我有一個存儲過程,它使用getdate()來獲取當前日期並與提供的進行比較。使用getdate進行單元測試存儲過程的最佳做法()

但是測試出現問題 - >通常測試我們已經準備好輸入和輸出數據以及這些數據之間的預定義日期。但getdate()將始終返回當前時間,因此測試結果將隨時間而有所不同。

我想沒有辦法改變getdate()會返回什麼?但是從存儲過程中取出getdate()並使用一些輸入參數,而不是一個選項。

測試此存儲過程以使測試結果保持不變的最佳做法是什麼?

+3

您可以創建一個調用'get-date'並返回輸出的自定義函數;那麼當你測試時你可以重寫該函數的定義來返回你的測試值? – JohnLBevan

+1

除了John的建議之外,我認爲唯一的另一種方式是將日期傳遞給proc。 – DavidG

+1

你能否澄清你是如何單元測試存儲過程的?通常這是集成測試的領域。您是否在使用基於SQL的框架,如TSQLUnit,Microsoft的SQL Server數據工具或其他? – TrueWill

回答

0

看起來它不能做短更改服務器的日期或修改的存儲過程:

Changing the output of Getdate

在這些約束下,您可以檢查過程返回沒有錯誤的結果集。如果過程查詢其他表,則可以使用基於當前日期的數據填充這些表,調用過程,驗證結果,然後從其他表中刪除數據。或者,如果程序是真正固定且不變的,那麼自動化測試的成本可能會高於此(罕見)情況下的值。您可以手動驗證過程(QA)。

+0

是的,跳躍更好的方法。對於我的案例替代功能,如@JohnLBevan所提及的,在你提供的鏈接中將是最好的,因爲不希望在測試中引入日期算術,並且基於真實的當前日期,因爲在這種情況下不是恆定的幾周:( – nahab

相關問題