2013-07-04 32 views
2

我想在一個只使用SQL Server中的存儲過程和函數實現的項目中實現Test First Development。SQL Server中存儲過程的單元測試

有一種方法可以簡化存儲過程和函數的單元測試的實現嗎?如果不是,創建這些單元測試的最佳策略是什麼?

回答

4

當然可以做xUnit風格的SQL單元測試和數據庫開發的TDD - 過去4年我一直這樣做。有許多流行的基於T-SQL的測試框架,比如tsqlunit。紅門在這個領域也有一個我曾經簡單看過的產品。

當然,您可以選擇使用其他語言(如C#)編寫測試,並使用NUnit來調用它們,但這將進入集成領域而不是單元測試領域,更適合驗證您的後端和你的SQL公共接口。

http://sourceforge.net/apps/trac/tsqlunit/

http://tsqlt.org/

也許我可以大膽地爲您指出在手冊我自己的自由(100%T-SQL)SQL Server的單元測試框架 - SS-單位 - 作爲提供一些想法,你如何編寫單元測試,即使你不使用它打算: -

http://www.chrisoldwood.com/sql.htm

http://www.chrisoldwood.com/sql/ss-unit/manual/SS-Unit.html

幾年前,我還向ACCU介紹瞭如何對T-SQL代碼進行單元測試,並且還介紹瞭如何在單元測試之前或之後編寫單元測試的幻燈片。

http://www.chrisoldwood.com/articles.htm

這是一個幾年前根據各地在ACCU會議我的數據庫TDD講一個博客貼子,整理一些相關的帖子(所有煤礦,黯然)周圍開發數據庫API的這種方式。

http://chrisoldwood.blogspot.co.uk/2012/05/my-accu-conference-session-database.html

(這似乎是肚臍凝視的相當無償的金額。這並不意味着是,這只是我有很多的鏈接,點點滴滴,我認爲是相關的。我將愉快地刪除的答案,如果它違反了SO規則)數據庫

+1

您的帖子對我來說是非常有用的,謝謝。 我開始探索你的單元測試框架,現在看起來對我的意圖非常好。我只是在安裝腳本中發現了一個可能的問題。文件CreateSchemas.sql不會創建「測試」模式。如果有更好的地方發佈這個問題,讓我知道。 只是最後的建議,你應該把你的代碼放在像github這樣的開源代碼庫中,它會更容易訪問,你可以爲志願者進一步改進而受益。 – miguelbgouveia

+1

它最終在GitHub上:https://github.com/chrisoldwood/SS-Unit –

1

這是可行的。創建測試,並在設置中創建一個新的db實例並給它一些數據,然後執行procs。驗證你的假設,就像我拿回了正確的數據一樣。放下測試數據庫,然後在下一次測試中再次完成。

1

單元測試實際上是很大的話題,而且有很多不同的方式去做它。我做的是自己寫的最簡單的方法,你自己的測試這樣的:

BEGIN TRY 
<statement to test> 
THROW 50000,'No error raised',16; 
END TRY 
BEGIN CATCH 
if ERROR_MESSAGE() not like '%<constraint being violated>%' 
THROW 50000,'<Description of Operation> Failed',16; 
END CATCH 

在此w唉,你可以實現不同類型的數據進行測試: - CHECK約束,外鍵約束的測試,測試的唯一性等等......

+0

這是一個很好的單元測試嗎?如果你正在測試一個存儲過程,這將檢查它是否存在並運行,但不會檢查它是否正確(即:它的行爲是依賴於其他地方的行爲)。 – Maverick