2012-11-08 52 views
1

因此,這裏是我想要做的,在堅持:如何在JUnit測試中測試從一個Stateless Session Bean的另一個Eclipse項目的實體類

我有@Entity共享的Eclipse Java項目(EJB 3.1)其他一些Eclipse WebApp項目使用的類。這個項目本身沒有persistence.xml!使用此項目的其他WebApp項目在WebContent/META-INF下聲明自己的persistence.xml,並使用jar-file標記在persistence.xml中引用此項目的JAR。當然,共享項目的JAR會作爲這些WebApp項目中的部署依賴項添加並置於WEB-INF/lib下。

現在我創建JUnit4測試用例來測試這些WebApp項目中的無狀態會話Bean。我正在使用Apache TomEE 1.5.0 Plus,並且在測試用例中,我使用@Before方法使用EJBContainer.createEJBContainer()方法以嵌入模式啓動OpenEJB容器。爲了正常工作,我創建了一個替代test.persistence.xml(它使用與HSQL內存數據庫不同的數據源並使用正向映射創建表)。我將它放在src文件夾的META-INF中,在@Before方法中,我將「openejb.altdd.prefix」設置爲「test」,以便讀取替代test.persistence.xml。所有這些設置工作。

問題是,只要OpenJPA 2.2.0啓動,它就會抱怨共享項目中沒有持久化類!這是因爲test.persistence.xml中的jar-file標籤引用了一個不存在的jar!當Eclipse部署其他WebApp項目時,它會在WEB-INF/lib下創建JAR,實際的persistence.xml指向該路徑下的jar!但是,運行JUnit測試用例時,我找不到任何這樣的JAR。

那麼,如何在test.persistence.xml中引用此JAR或共享項目中的類,而不會使測試用例本身過度依賴於部署結構或任何特定的硬編碼路徑!這個測試用例最終將被提交到存儲庫,因此必須這樣,任何檢查出它的開發者都可以簡單地運行它。

任何指針正確的方向將不勝感激!

回答

3

IMO最簡單最好的方法就是使用Arquillian。 它更容易控制包裝,容器的生命週期等。 TomEE還提供了一個很好的集成(適配器),您可以使用Arquillian。

檢查文檔頁面http://tomee.apache.org/documentation.html 有一個arquillian部分。

您還可以檢查TomEE示例頁面,您可以在其中找到包含arquillian的大量小樣本。

希望它有幫助 Jean-Louis

相關問題