2013-10-08 167 views
1

我正在爲我的一些EJB準備junit測試用例。我做了一點谷歌和大多數鏈接指向arquillian http://arquillian.org,但似乎arquillian是緩慢的,它需要一個正在運行的容器。我可以使用arquillian來測試jboss服務bean(org.jboss.ejb3.annotation.Service)嗎 - 一個例子會有很大的幫助嗎?EJB的junit測試

一點點調查導致我到JBoss Microcontainerhttp://docs.jboss.org/jbossmc/docs/2.0.x/userGuide/index.html。這個Microcontainer是否需要任何運行的jboss實例?我可以在這個微容器中部署所有類型的EJB + jboss服務bean嗎?

另外,是什麼VS JBossEmbeddedAShttps://community.jboss.org/wiki/JBossEmbeddedASQuickstartAndRunnableExample

預先感謝JBoss微之間的差

Dipankaj

+0

你可能也想看看openEJB。在Eclipse中非常容易設置和超快速啓動。它在您的項目中自動檢測EJB和MDB並將其綁定到JNDI。 – helios

回答

3

一個單元測試的目的是測試只的單個單元代碼,例如你的bean類。

因此,你的單元測試不應該要求任何基礎設施,並應該嘲笑所有必要的參考其他單位。

我知道在現實生活中這通常很難實現,但是如果你想要有任何容器服務,例如注射機制,那麼你的測試超越了單元測試。

Arquillian提供了容器適配器,以便您的測試用例可以在嵌入式甚至真實容器中運行。它的好處之一是能夠在真實應用服務器上運行測試,而不是在某些模擬環境中運行測試,並在多種環境下運行相同的測試。在不同的應用服務器上所以在你的情況下,我會建議爲單元測試的所有東西(你會看到,如果你在開發單元的同時進行測試,你會注意使它可以很好地測試)編寫單元格,以及對每個外部參考使用一個模擬框架(例如Mockito),然後在您進行集成測試的情況下使用Arquillian。

+0

感謝Geziefer ......你能不能專注於Microcontainer ......我可以假設它是一個「迷你jboss」,可以用java代碼啓動/停止/部署嗎? – dgm

+0

@dipankaj我沒有使用Microcontainer,但作爲您提供的參考狀態,它是「JBoss的JMX Microkernel,支持在JBoss應用程序服務器之外直接部署POJO和獨立使用。」 - 所以它不是一個EJB容器。 JBoss Embedded AS爲JBoss Application Server的創建,配置,生命週期和部署操作提供了「最終用戶API」。 - 所以你可以在你的測試用例中引導一個AS。我們在Seam 2項目中結合TestNG使用了它。 - 但是,我仍然建議儘可能靠近真實容器進行集成測試。 –

2

我們使用EJB3Unit具有很好的結果。它根本不需要容器。它注入了@DataSource,@ PersistenceContext,@Resource和@EJB

它也有侷限性,因爲它不是容器,就像它不創建事務並且不運行攔截器。但是你會用集成測試來測試@Interceptor和@Transaction嗎?

2

我最近公開了我自己開發的無容器EJB單元測試遠程工作,請參閱testfun-JEE中的示例。

testfun-JEE支持注入EJB和Mockito mock以及使用JPA和JDBC。