我有幾個關於使用JUnit的集成測試EJB 3.0組件的問題。測試EJB 3.0組件
在您的JUnit測試中,您可以注入會話bean資源本地實體管理器,因此「模擬」ejb-container。但是,如果...
如果您需要測試ejb方法的事務屬性是否正確處理,該怎麼辦?這可以在容器外部完成嗎?如果不是,在容器內測試它的最簡單方法是什麼?
如果在每次測試之前需要確保db中有一些測試記錄,該怎麼辦?你如何確保在測試執行後(即使失敗)db清除了測試數據?
我有幾個關於使用JUnit的集成測試EJB 3.0組件的問題。測試EJB 3.0組件
在您的JUnit測試中,您可以注入會話bean資源本地實體管理器,因此「模擬」ejb-container。但是,如果...
如果您需要測試ejb方法的事務屬性是否正確處理,該怎麼辦?這可以在容器外部完成嗎?如果不是,在容器內測試它的最簡單方法是什麼?
如果在每次測試之前需要確保db中有一些測試記錄,該怎麼辦?你如何確保在測試執行後(即使失敗)db清除了測試數據?
您還可以使用嵌入JBoss的單元測試的EJB,如#553031
它不是一個漂亮的解決方案討論,但它的工作原理。
如果你碰巧在使用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
將在設置方法創建並在拆卸關閉。這在測試運行之間完全初始化數據庫。