2012-03-30 57 views
4

我想測試我的類MyTypeDAO使用JUnit 4.9與Hibernate 4.1實現。我有以下問題:DAO測試:正確的方法?

在我的DAO中,我有一個findById方法,通過它的ID檢索我的類型實例。如何測試這種方法?

我所做的:

  1. 創建我的類型的實例。
  2. 然後,我需要堅持這個實例,但是如何?我可以依靠我的saveMyType方法嗎?我不這麼認爲,因爲我在測試案例中,而且這種方法沒有經過測試。
  3. 然後,我需要調用findById方法與第1步​​
  4. 最後創建的實例的ID,我檢查在步驟1中創建的實例等於一個我在一步得到3

有什麼想法?什麼是最佳實踐?

我對save方法有同樣的問題,因爲在運行它之後,我需要檢索保存實例。在這裏,我不認爲我可以依賴我的findById方法,因爲它尚未經過測試。

感謝

回答

4

一種可能方式是:

中創建一個存儲數據庫進行測試,從預定義的SQL腳本這個數據庫的負載內容andthen測試你的DAO類針對這個數據庫。

每次開始測試時,數據庫都將從頭開始使用sql腳本創建,您將知道哪個id應該返回結果,哪個不應該。

See [DbUnit][1](從聰的評論)

+1

+1 ...此外,DbUnit大大簡化了這項工作,請看看它。 – satoshi 2012-03-30 09:14:32

+1

另一個用於dbUnit的+1。如果您確實使用它,請使用export to xml功能。這樣你可以編輯所有表格,然後創建xml:節省大量時間。 – 2012-03-30 09:30:50

1

我不認爲你有很多選擇,以實現這一目標。正交試驗(測試2項或依賴試驗)並不是一個好習慣。儘管如此,你應該真的考慮這個異常有效和快速。你是對的:堅持一個對象並檢索它是測試這個dao層的好主意。

其他選項包括在數據庫中記錄您確定的記錄並對其進行檢索(findById)。而第二個測試是堅持一個對象並將其拆除的方法。

但實際上,測試加載和保存在一起會更簡單,這很合理。

+0

似乎我不是被迫進行正交測試。例如,DBUnit提供了從數據庫中獲取數據的可能性,所以我可以假設DBUnit代碼已經過測試,而且我用DBUnit得到的數據實際上是數據庫中的數據。你怎麼看? – 2012-04-01 17:06:58