2010-04-06 26 views
2

當我在JUnit中測試DAO模塊時,一個明顯的問題是:如何在數據庫中恢復測試數據? 例如,在兩種測試方法testA()testB()中都應刪除記錄,這意味着兩種測試方法的先決條件都需要刪除現有記錄。然後我的策略是插入記錄setUp()方法來恢復數據。在DAO單元測試期間恢復數據的策略是什麼?

你最好的解決方案是什麼?或者在這種情況下你的實際想法?謝謝

回答

1

一個簡單的解決方案是在測試後回滾事務(例如在tearDown()中)。這樣,測試可以進行他們喜歡的所有更改,但不會更改數據庫(不要忘記關閉連接的autoCommit)。

但有一個缺點:如果一個測試失敗,你不能偷看數據庫找出原因。因此,我的大多數測試都在數據庫運行之前先清理數據庫,並使用autoCommit,以便我可以查看失敗的最後狀態,對數據運行固定的SQL查詢等。

+0

'回滾'解決方案很酷! – 2010-04-07 05:01:16

2

我會做一個方法createRecord()。它也可能是一種測試方法。無論何時您需要創建記錄,請從其他測試方法調用該方法。

1

Bozho是正確的,當然,但我想補充一點細節:

如果可能的話,單元測試操作之前,建立自己的數據,再經過自己清理。因此,理想情況下,您不會對現有數據(可能是從生產中複製)進行測試,而是將某些數據設置爲測試的一部分;這實際上是唯一可以確保您的測試將測試您的目標的唯一方法。

2

也許DBUnit可以幫助你。 它允許在執行每個測試之前使TEST數據庫處於預定義的狀態。一旦建立起來,測試數據庫驅動的應用程序真的很容易。