2010-08-12 82 views
1

我正在使用OpenJPA 2.0.0,Jersey 1.3和JUnit 4.8.1構建應用程序。OpenJPA,Jersey,JUnit:爲我的單元測試使用不同的持久性單元?

我設置了它,所以我在persistence.xml中定義了兩個不同的持久性單元:「default」和「unittest」。默認設置爲連接到Oracle實例,而unittest設置爲連接到本地H2DB嵌入式數據庫文件。我這樣做是爲了始終使用一個乾淨的數據庫來啓動我的單元測試,該數據庫中包含一些已知的數據,這些數據可以在每次單元測試運行之間被覆蓋。

問題是,現在我想使用Jersey Testing Framework來測試我的實際Web服務,而不僅僅是程序的底層。我的根資源類不加載unittest持久性單元,它們總是加載默認值。

所以我可能需要做的是注入其中持久單元應該用於實例化EntityManager的根資源類,然後有一些方法來注入單元測試時,我跑我的測試,但默認情況下注入除此以外。但我想不出有什麼好辦法做到這一點。

我是Java EE開發的新手,這可能很明顯。

任何幫助?

+0

EntityManager或者說EntityManagerFactory來自哪裏?你是通過調用Persistence.createEntityManagerFactory()來創建它,還是由某個框架注入?你沒有提到你的問題中的任何一種框架。 – 2011-04-05 17:45:36

回答

1

我想應該是可以創造的src /測試/資源/ META-INF第二persistence.xml中。

如果我理解正確,maven會將目標/測試類放在classpath前面的目標/類中,這樣在單元測試中,只有您的測試persistence.xml將被讀取。這樣,您可以使用相同的持久性單元名稱,但具有不同的配置。

src/main/resources/ 
    META-INF 
     persistence.xml <-- for actual application 

src/test/resources/ 
    META-INF 
     persistence.xml <-- for unit tests 

編輯:

哎呀,我被欺騙,以爲你被對方的回答中使用Maven的。如果你不是,忘記我所說的......

0

您使用的是Maven嗎? 如果是的話,有一個技巧可以讓你「讀」你的Java類中的POM值。 這對我來說非常有用,您只需在您的POM中設置持久性單元名稱,在測試過程中設置另一個名稱,就是這樣。

Maven variables in java context