我使用Hibernate和廣泛採用的Hibernate查詢語言來定義我的DAO中的查詢。使用Hibernate集成測試本機SQL查詢
無論如何,有時HQL無法執行與本機SQL查詢相比的特定任務。
例如下面的Postgres的表情不是「轉換」到HQL:
my_date > current_date - interval '10 year'
這意味着,在某些情況下,我正在寫原生查詢。考慮到我正在使用另一個數據庫進行集成測試(http://hsqldb.org/),它不反映上述Postgres表達式的語法。這導致在使用這種本地查詢的DAO方法期間出現測試異常。
你如何處理這種情況?我只是覺得以下情況:
- 不要使用本地查詢,並嘗試在HQL構建一切
- ,不測試它們使用這種查詢方法(不高興) (可能嗎?)
- 使用同一個數據庫既爲生產和發展(性能問題)
其他更有趣的解決方案?謝謝
您正在使用另一個數據庫_unit testing_?我認爲你誤解了單元測試的目的。你根本不應該打數據庫。當您開始訪問數據庫時,您現在正在使用_integration testing_。單元測試的目的是覆蓋一個特定的* unit *代碼(通常是一個類),並且應該模擬該類可能具有的任何和所有外部依賴。 –
@ColinMorelli所以你如何在單元測試中測試DAO?你如何*嘲笑*數據庫? –
也許一個解決方案是擴展一些hibernate/jpa類(例如EntityManager)以在將SQL發送到HSQLDB之前更改SQL。 – mael