2014-01-22 39 views
0

我是數據庫的新手,但我將在Hibernate的應用程序中使用PostgreSQL。這很清楚如何安裝Postgres,綁定到休眠並使用它。但我無法弄清楚如何用Maven運行內存中的Postgres數據庫進行測試。可能嗎? 如果否 - 任何建議如何在這種情況下測試我的應用程序?使用內存中的PostgreSQL

p.s.指向相應教程的鏈接是最合適的,我將非常感謝他們。 謝謝!

+2

簡答:你不能。 Postgres不是爲進程內部署模型而設計的。只需要一個默認服務器,單元測試可以使用默認的用戶。 –

回答

0

(我已修改並擴展此答案on the post this one is a dup of;我保留此處,因爲這是對此問題的更直接回答)。

但我無法弄清楚如何用Maven運行內存Postgres數據庫進行測試。可能嗎?

不,這是不可能的。 PostgreSQL在C中實現並編譯爲平臺代碼。您無法將其推入jar,並將其作爲一次性內存數據庫啓動。

相反,有一個標準的測試配置並記錄它。認爲:

運行這些測試,你需要的PostgreSQL 9.2或更高版本安裝和 本地主機端口5432上運行的,名爲「myapptest」誰擁有 名爲「myapptest」一個數據庫中的用戶。必須允許'md5'認證 ,密碼爲'abcdefg',或者您可以使用'信任'模式。

要這樣設置,你可以使用:

CREATE USER myapptest PASSWORD 'abcdefg'; 
    CREATE DATABASE myapptest OWNER myapptest TEMPLATE template0; 

pg_hba.conf添加一個條目,如:

host myapptest myapptest 127.0.0.1/32 md5 
    host myapptest myapptest ::1/128   md5 

使用Maven的參數來控制是否擊中數據庫中獲取運行測試,這樣其餘的測試仍然可以運行。

你也可以使用Maven params指定一個DB主機名/用戶名/數據庫名/密碼進行測試,如果你熱衷的話。我不會親自打擾。

或者,如果你真的敏銳你可以有你的測試工具找到initdbpostgres二進制文件,運行initdb創建一個數據庫,修改pg_hba.conftrust,運行postgres啓動它一個隨機端口上,創建一個用戶,創建一個數據庫,並運行測試。我個人認爲這是一個應該避免的重大難題;只需配置測試數據庫就簡單多了。

有些人在PostgreSQL方言模式下使用H2數據庫來運行測試。我認爲這與使用SQLite進行測試和PostgreSQL進行開發的Rails人差不多。