當我在JUnit中測試DAO模塊時,一個明顯的問題是:如何在數據庫中恢復測試數據? 例如,在兩種測試方法testA()和testB()中都應刪除記錄,這意味着兩種測試方法的先決條件都需要刪除現有記錄。然後我的策略是插入記錄setUp()方法來恢復數據。在DAO單元測試期間恢復數據的策略是什麼?
你最好的解決方案是什麼?或者在這種情況下你的實際想法?謝謝
當我在JUnit中測試DAO模塊時,一個明顯的問題是:如何在數據庫中恢復測試數據? 例如,在兩種測試方法testA()和testB()中都應刪除記錄,這意味着兩種測試方法的先決條件都需要刪除現有記錄。然後我的策略是插入記錄setUp()方法來恢復數據。在DAO單元測試期間恢復數據的策略是什麼?
你最好的解決方案是什麼?或者在這種情況下你的實際想法?謝謝
一個簡單的解決方案是在測試後回滾事務(例如在tearDown()
中)。這樣,測試可以進行他們喜歡的所有更改,但不會更改數據庫(不要忘記關閉連接的autoCommit
)。
但有一個缺點:如果一個測試失敗,你不能偷看數據庫找出原因。因此,我的大多數測試都在數據庫運行之前先清理數據庫,並使用autoCommit,以便我可以查看失敗的最後狀態,對數據運行固定的SQL查詢等。
我會做一個方法createRecord()
。它也可能是一種測試方法。無論何時您需要創建記錄,請從其他測試方法調用該方法。
Bozho是正確的,當然,但我想補充一點細節:
如果可能的話,單元測試操作之前,建立自己的數據,再經過自己清理。因此,理想情況下,您不會對現有數據(可能是從生產中複製)進行測試,而是將某些數據設置爲測試的一部分;這實際上是唯一可以確保您的測試將測試您的目標的唯一方法。
也許DBUnit可以幫助你。 它允許在執行每個測試之前使TEST數據庫處於預定義的狀態。一旦建立起來,測試數據庫驅動的應用程序真的很容易。
'回滾'解決方案很酷! – 2010-04-07 05:01:16