2010-11-06 63 views
0

我們支持MS SQL Server 2008(2005也許),Oracle以及Sybase。 有一個大型腳本,它採用AWHILE,它將構建表,存儲過程,視圖,觸發器等,並使用我們認爲合理的數據填充表。使用MSTest測試存儲過程(.Net)

現在我們試圖將單元測試引入到系統中,主要測試存儲過程以及它們之間的交互。所以,我不希望運行語句和存儲過程特別具有挑戰性。

困難的部分是在測試運行之前和之後維護數據庫的正確狀態,即使發生任何異常。是的,我可以利用using聲明和「IDisposable」。對我來說更難的部分是(至少根據我所做的以及對編程的瞭解):我如何安全地一遍又一遍地恢復MS SQL,Oracle和Syabse數據庫的狀態?儘管我願意考慮這一點,但我不應該假設只有一個用戶在任何時候都在使用它。我希望所有3個數據庫都爲此提供機制,我只需要使用正確的驅動程序觸發它們(我們已經測試過ODBC了 - 它似乎對我們有用)。

請留下您的建議以及問題,如果您有它們。

回答

2

有這一問題的幾個解決方案:

  1. 每次測試後運行該數據庫中的數據創建腳本。您只需要創建數據,而不是表,存儲過程和觸發器。運行測試時這些應該保持靜態。如果數據創建過於耗時,這將無法工作。

  2. 按表隔離數據創建腳本,並重新創建每個測試夾具所需的表數據,並且只在每個測試之前在該特定功能中運行這些腳本。這會加快速度,但是您仍然在每次測試之前創建數據集,並且在每次測試之前仍然可能太慢而無法執行。

  3. 最佳選項:在交易中包裝每個測試。我假設您列出的所有數據庫都支持交易。簡單地說,打開一個事務,執行你的測試,驗證結果,然後回滾事務。回滾將撤銷您所做的任何數據更改。只要您使用相同的連接來執行修改數據的存儲過程並驗證結果,則更改應該可用於連接,但不會提交到數據庫。