2012-10-15 31 views
3

我開始一個使用Google Guice和Hibernate的項目,並且在配置數據庫訪問層的過程中,我對這個過程產生了一些疑惑。如何測試休眠類的dao模式

我在我的POJO中使用JPA批註,我的通用DAO實現使用EntityManager對象與數據庫進行通信。我做了幾次「手動」測試,我發現它工作正常,但我更願意遵循TDD方法來強化我在這種方法論方面的知識。我不確定在java中測試泛型的最佳方法是什麼,更不用說測試Hibernate Generic DAO模式的最佳解決方案。

我已看過一些解決方案,但我不覺得有沒有人真的很舒服:

  • 其中之一是使一個抽象類,以測試通用DAO和使用抽象方法來獲得特定DAO並獲得實例堅持等
  • 另一種解決方案是使用抽象類(如以前的解決方案),並使用工廠而不是抽象方法:有了這兩個解決方案,我不知道是否值得擁有一個讓實體去測試我的項目中每個案例的方法。
  • 另一個解決方案可能是測試特定DAO中的每個功能比通用dao更好:我認爲這是最糟糕的解決方案,因爲在大多數情況下,我將不得不重複大量代碼來測試一樣。

除此之外,我已經讀過,刪除DAO層並直接從服務中使用實體管理器可能會更好:我不認爲這是最好的方法,因爲您將數據庫層與服務層。

任何人都可以幫助我嗎?!

回答

0

DAO和entityManager的區別在哪裏?它們都是數據庫層,只是一個不同的抽象層。

爲了測試查詢等,內存數據庫比嘲笑完整的數據訪問層要好。

+0

嗯......我沒有這樣想過,也許我必須深思。 我正在使用內存數據庫進行測試,我的問題主要集中在測試數據訪問層的更好策略是什麼。 – juangabreil

+0

測試真正的實現,否則測試是無稽之談,因爲他們沒有測試他們應該做什麼。 – Firo