Java EE 6测试第I部分– EJB 3.1可嵌入API
EJB 3.1 Specification引入了EJB 3.1 Embeddable API,用于在Java SE環(huán)境中執(zhí)行EJB組件。
與傳統(tǒng)的基于Java EE服務(wù)器的執(zhí)行不同,可嵌入式用法允許客戶端代碼及其相應(yīng)的企業(yè)bean在同一JVM和類加載器中運(yùn)行。 這為測(cè)試,脫機(jī)處理(例如批處理)以及在桌面應(yīng)用程序中使用EJB編程模型提供了更好的支持。
[…]可嵌入的EJB容器為托管環(huán)境提供了對(duì)Java EE運(yùn)行時(shí)中存在的相同基本服務(wù)的支持:注入,對(duì)組件環(huán)境的訪問(wèn),容器管理的事務(wù)等。通常,企業(yè)bean組件不了解他們?cè)谄渲羞\(yùn)行的一種托管環(huán)境。 這使得企業(yè)組件在各種測(cè)試和部署方案中都具有最大的可重用性,而無(wú)需進(jìn)行大量的返工。
讓我們看一個(gè)例子。
首先創(chuàng)建一個(gè)Maven項(xiàng)目,然后添加可嵌入的GlassFish依賴項(xiàng)。
我選擇使用TestNG測(cè)試框架,但JUnit應(yīng)該也能正常工作。
這是一個(gè)簡(jiǎn)單的Stateless會(huì)話Bean:
@Stateless public class HelloWorld {public String hello(String message) {return "Hello " + message;} } 它通過(guò)無(wú)接口視圖公開(kāi)業(yè)務(wù)方法。
它沒(méi)有可用于嵌入執(zhí)行的特殊API。
以下是一些測(cè)試代碼,用于在可嵌入容器中執(zhí)行Bean:
public class HelloWorldTest {private static EJBContainer ejbContainer;private static Context ctx;@BeforeClasspublic static void setUpClass() throws Exception {// Instantiate an embeddable EJB container and search the// JVM class path for eligible EJB modules or directoriesejbContainer = EJBContainer.createEJBContainer();// Get a naming context for session bean lookupsctx = ejbContainer.getContext();}@AfterClasspublic static void tearDownClass() throws Exception {// Shutdown the embeddable containerejbContainer.close();}@Testpublic void hello() throws NamingException {// Retrieve a reference to the session bean using a portable// global JNDI nameHelloWorld helloWorld = (HelloWorld)ctx.lookup("java:global/classes/HelloWorld");// Do your testsassertNotNull(helloWorld);String expected = "World";String hello = helloWorld.hello(expected);assertNotNull(hello);assertTrue(hello.endsWith(expected));} }源代碼在GitHub上的ejb31-embeddable文件夾下可用。
有關(guān)JPA示例的分步教程,請(qǐng)閱讀使用嵌入式EJB容器從NetBeans文檔測(cè)試企業(yè)應(yīng)用程序 。
盡管此新API向前邁了一大步,但我仍然對(duì)這種方法有疑問(wèn):您正在將容器進(jìn)行測(cè)試。 這需要一個(gè)與您的生產(chǎn)環(huán)境不同的專用容器。
在Java EE 6測(cè)試第二部分中 ,我將介紹Arquillian和ShrinkWrap 。
Arquillian是一個(gè)功能強(qiáng)大的面向容器的測(cè)試框架,位于TestNG和JUnit之上,使您能夠在您選擇的容器上創(chuàng)建生產(chǎn)環(huán)境,并僅在該環(huán)境中執(zhí)行測(cè)試(使用數(shù)據(jù)源,JMS目標(biāo)以及許多其他工具)。您希望在生產(chǎn)環(huán)境中看到的其他配置)。 Arquillian并沒(méi)有將您的運(yùn)行時(shí)帶到測(cè)試中,而是將您的測(cè)試帶到了運(yùn)行時(shí)中。
相關(guān)文章
- Java EE 6測(cè)試第二部分– Arquillian和ShrinkWrap簡(jiǎn)介
- Maven 2 Cobertura插件–更新
- 單元測(cè)試JBoss 5服務(wù)
- 條帶框架和EJB3
- Maven 2 Cobertura插件
- 上一篇文章:使用jQuery更改URL參數(shù)
- 下一篇文章:Java EE 6測(cè)試第二部分– Arquillian和ShrinkWrap簡(jiǎn)介
參考: Java EE 6測(cè)試第I部分–來(lái)自我們JCG合作伙伴 Samuel Santos的EJB 3.1可嵌入API ,位于Samaxes博客上。
翻譯自: https://www.javacodegeeks.com/2012/06/java-ee-6-testing-part-i-ejb-31.html
總結(jié)
以上是生活随笔為你收集整理的Java EE 6测试第I部分– EJB 3.1可嵌入API的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 一类医疗备案怎么办(一类医疗备案)
- 下一篇: Java线程死锁–案例研究