2012-03-28 18 views
1

考慮針對以數據庫爲中心的服務的自動化單元測試套件。許多小部件都可以在沒有任何數據庫連接的情況下進行單元測試,但是插入實際的數據庫快照(或快照)並執行更大的集成方案也很有用。因此,一些關鍵測試包括與測試代碼本身分離的預執行和後執行數據快照的形式。使面向數據庫的測試套件保持最新狀態

服務發展迅速,數據庫架構也發展迅速。這不斷地使測試數據無效,對於開發人員而言,讓測試套件保持最新狀態而不讓缺陷行爲蔓延到更新的快照中變得具有挑戰性。

通常甚至不可能針對舊的(測試數據庫)模式執行更新版本的服務;這可以通過具有兩層數據庫快照來解決,一個用於初始化(測試輸入),另一個用於純粹用於檢查(例如,預期的測試輸出)。初始化模式/數據可以隨應用程序自動升級,但顯然不是預期的輸出數據。

我已經經歷了幾次,但是我希望鏈接更多關於該主題以及人們的經驗,技術和方法的閱讀,特別是在Java,.NET和可能的純數據庫環境中。

這個問題是故意有些大,因爲我不知道我會好好學習,但這裏也是它的一個較窄的版本:

是否有廣泛的Java或.NET框架,使開發人員更容易通過行爲(數據)差異來區分模式差異,並將現有測試數據半自動更新爲新模式?

回答

0
  1. 這是相當的比有一個框架,監視數據庫的變化組織測試套件的問題。例如 - 如果您使用Hibernate/EJB持久性模型,那麼在執行測試套件之前,您可以從對象映射(例如使用Hbm2Ddl)創建數據庫。然後每個測試通過保存實體創建必要的對象(即沒有任何直接的SQL)。基本上來說,在這種情況下,你不會直接處理數據庫,只能通過應用程序中的持久層。在執行結束時,數據庫模式被刪除。

  2. 另一方面,這是一個過程的問題。每次數據庫更改都必須保持測試的完整不像有些人在不考慮測試完整性的情況下進行數據庫更改。基本上,如果源代碼中斷了測試,則無論代碼或數據庫結構發生變化,都不能接受任何源代碼變更。

換句話說,應該有在發展過程+適當的測試環境中的某些學科設置並經由持久層工作(即,不是一個測試數據庫是生產數據庫與測試的轉儲,而不或以最少的設置/拆卸)。

+0

1.我喜歡你的方法在一個有趣的特殊情況。只要服務是數據庫的唯一所有者,就非常有吸引力。其他時候,數據庫由測試套件旨在涵蓋的服務或服務組以外的代理創建並部分填充。當技術過於複雜時,其他模塊的某些模擬結構或其他對象產生的測試數據必須以某種方式維護。 2.這通常是正確的,但我如何讓人們更容易更新技術可能與他們不同的測試套件? – 2012-03-29 19:14:38

+0

您是否使用TeamCity或Bamboo等測試集成工具?在這種情況下,人們會收到通知,說明測試已被破壞(即造成這種情況的更改的作者)。它可以很快升級爲負責或可以修復測試(或代碼)的人員。 – 2012-03-29 19:20:47

+0

我們使用預先提交和提交後的TeamCity以及一些類似的自制框架。我遇到的問題是,錯誤地升級測試套件非常容易(當大部分差異如預期的那樣,看起來正確時,很容易將真實結果聲明爲正確的)。當一次更改使上百個測試用例無效並對每個案例進行人工檢查時,這只是一個問題,每個更改的數據行都不太現實。 – 2012-03-29 20:15:19

相關問題