2009-02-24 67 views
1

我有幾個關於使用JUnit的集成測試EJB 3.0組件的問題。測試EJB 3.0組件

在您的JUnit測試中,您可以注入會話bean資源本地實體管理器,因此「模擬」ejb-container。但是,如果...

  1. 如果您需要測試ejb方法的事務屬性是否正確處理,該怎麼辦?這可以在容器外部完成嗎?如果不是,在容器內測試它的最簡單方法是什麼?

  2. 如果在每次測試之前需要確保db中有一些測試記錄,該怎麼辦?你如何確保在測試執行後(即使失敗)db清除了測試數據?

回答

2

您還可以使用嵌入JBoss的單元測試的EJB,如#553031

它不是一個漂亮的解決方案討論,但它的工作原理。

0

如果你碰巧在使用Maven,或者即使你不是,this might be helpful。測試事務語義的典型方法是使用像H2或HSQLDB(Hypersonic)這樣的內存數據庫。所以實際上,你正在測試一個非常輕量級的容器。 Hibernate可以配置爲你的JPA實現。它會將數據保存到完全在RAM中運行的全功能關係數據庫中。

至於燈具,有很多選擇,其中一個比較流行的是DbUnit,但根據我的經驗,它們比它們的價值更復雜。我更喜歡創建自己的「構建器」類,以便使用必要的模型對象設置我的測試。我喜歡的配置「設置器」返回構建器的一個實例,這樣我可以調用鏈一起,像這樣:

this.emf = Persistence.createEntityManagerFactory ("hibernate-hsqldb"); 
    Widget widget = new WidgetBuilder(this.emf).setAnOption(4).setAnother("test").build(); 

通常,emf將在設置方法創建並在拆卸關閉。這在測試運行之間完全初始化數據庫。