2011-11-22 55 views
2

我有一個數據庫支持的應用程序,很遺憾,它的數據庫測試很少。我試圖快速有效地測試數據庫。有效地測試數據庫後端

到目前爲止,我已經學會:

  • 測試的應用程序把/獲取數據到數據庫
  • 使用模擬DB的測試對象/關係映射代碼
的能力

我仍然在努力實現第一點。看來,測試的唯一方法是將數據插入到真正的表中。但是用戶當然不希望看到我的測試數據。這是我目前在做的僞代碼:

begin a transaction 
insert a few rows 
check that no error has occurred 
'select' the rows back out 
check that no error has occurred, check that data out matches data in 
tell the test framework that it's successful 
abort the transaction 

這是一個最佳實踐,或某種可怕的反模式?有更好的建議嗎?

回答

2

您的用戶絕對不應該看到您的測試數據,因爲在生產測試是非常糟糕的做法!您應該嘗試創建測試環境並在那裏進行測試。

我發現的一個解決方案是創建一個單獨的數據庫實例,用一些已知數據填充它,並將其用於集成測試。確保在每個測試用例之後清理數據庫,因爲測試用例應該是獨立的。

在測試數據庫中使用事務並不是一個很糟糕的做法,因爲您可以確認事件並回滾事務,但是我擔心您會調用將提交到數據庫的代碼,從而改變以下測試的參數。當然,如果你的數據庫支持嵌套事務,這不是什麼大問題,但是ISTM並不是所有的數據庫都這麼做。

+0

+1,因爲我覺得你提一些好點,但我不知道我理解爲什麼'在生產測試是非常糟糕的practice'。我會認爲這是一個很好的做法 - 因爲數據庫測試的一點是驗證用戶計算機上的應用程序是否可以與用戶計算機上的數據庫交談,即所有內容都已正確安裝。 OTOH,在檢查數據庫模式是否應用程序期望的情況下,該語句對我來說是有意義的。 –

+1

一個壞主意,你提出的原因!讓我們說測試中出了問題,你不想要軟管你的生產環境。您也不想用測試數據污染您的生產數據庫,這使得難以對生產數據執行度量標準,偶爾會導致客戶想知道發生了什麼。此外,通過測試數據庫,您可以控制內容 - 這允許您進行真正的呼叫,獲取用戶數量並對其進行測試,而數據在生產中不斷變化。 – Kane

+0

超出評論空間。在行業最佳實踐中,至少有三種環境:生產(duh),測試(因此您可以使用已知數據在產品投入生產之前檢查更改)和開發(因爲開發人員經常在弄清楚事情的同時弄糟東西,而您不希望開發出干擾測試或更糟,生產的功能)。 – Kane

-2

是的,我們應該有3個不同的環境,如dev,qa和生產環境。您不應該使用生產數據,因爲有時候數據會複製到某些分佈式數據庫,並且如果您不知道複製,將會產生不必要的問題。

〜Temruzinn