Java EE 6測試第I部分– EJB 3.1可嵌入API

我們從Enterprise JavaBeans開發人員那里聽到的最常見的請求之一就是需要改進的單元/集成測試支持。
EJB 3.1 Specification引入了EJB 3.1 Embeddable API,用于在Java SE環境中執行EJB組件。

與傳統的基于Java EE服務器的執行不同,可嵌入式用法允許客戶端代碼及其相應的企業bean在同一JVM和類加載器中運行。 這為測試,脫機處理(例如批處理)以及在桌面應用程序中使用EJB編程模型提供了更好的支持。
[…]可嵌入的EJB容器為托管環境提供了對Java EE運行時中存在的相同基本服務的支持:注入,對組件環境的訪問,容器管理的事務等。通常,企業bean組件不了解他們在其中運行的一種托管環境。 這使得企業組件在各種測試和部署方案中都具有最大的可重用性,而無需進行大量的返工。

讓我們看一個例子。

首先創建一個Maven項目,然后添加可嵌入的GlassFish依賴項。
我選擇使用TestNG測試框架,但JUnit應該也能正常工作。

<dependencies><dependency><groupId>org.glassfish.extras</groupId><artifactId>glassfish-embedded-all</artifactId><version>3.1.2</version><scope>test</scope></dependency><dependency><groupId>org.testng</groupId><artifactId>testng</artifactId><version>6.4</version><scope>test</scope></dependency><!--The javaee-api is stripped of any code and is just used tocompile your application. The scope provided in Maven meansthat it is used for compiling, but is also available whentesting. For this reason, the javaee-api needs to be belowthe embedded Glassfish dependency. The javaee-api can actuallybe omitted when the embedded Glassfish dependency is included,but to keep your project Java-EE 6 rather than GlassFish,specification is important.--><dependency><groupId>javax</groupId><artifactId>javaee-api</artifactId><version>6.0</version><scope>provided</scope></dependency>
</dependencies>

這是一個簡單的Stateless會話Bean:

@Stateless
public class HelloWorld {public String hello(String message) {return "Hello " + message;}
}

它通過無接口視圖公開業務方法。
它沒有可用于嵌入執行的特殊API。

以下是一些測試代碼,用于在可嵌入容器中執行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文件夾下可用。

有關JPA示例的分步教程,請閱讀使用嵌入式EJB容器從NetBeans文檔測試企業應用程序 。

盡管此新API向前邁了一大步,但我仍然對這種方法有疑問:您正在將容器進行測試。 這需要一個與您的生產環境不同的專用容器。

在Java EE 6測試第二部分中 ,我將介紹Arquillian和ShrinkWrap 。
Arquillian是一個功能強大的面向容器的測試框架,位于TestNG和JUnit之上,使您能夠在您選擇的容器上創建生產環境,并僅在該環境中執行測試(使用數據源,JMS目標以及許多其他工具)。您希望在生產環境中看到的其他配置)。 Arquillian并沒有將您的運行時帶到測試中,而是將您的測試帶到了運行時中。

相關文章

  • Java EE 6測試第二部分– Arquillian和ShrinkWrap簡介
  • Maven 2 Cobertura插件–更新
  • 單元測試JBoss 5服務
  • 條帶框架和EJB3
  • Maven 2 Cobertura插件
  • 上一篇文章:使用jQuery更改URL參數
  • 下一篇文章:Java EE 6測試第二部分– Arquillian和ShrinkWrap簡介

參考: Java EE 6測試第I部分–來自我們JCG合作伙伴 Samuel Santos的EJB 3.1可嵌入API ,位于Samaxes博客上。


翻譯自: https://www.javacodegeeks.com/2012/06/java-ee-6-testing-part-i-ejb-31.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/372343.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/372343.shtml
英文地址,請注明出處:http://en.pswp.cn/news/372343.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Flume 中文入門手冊

原文&#xff1a;https://cwiki.apache.org/confluence/display/FLUME/GettingStarted 什么是 Flume NG? Flume NG 旨在比起 Flume OG 變得明顯更簡單。更小。更easy部署。在這樣的情況下&#xff0c;我們不提交Flume NG 到 Flume OG 的后向兼容。當前。我們期待來自感興趣測試…

原生JavaScript+CSS3實現移動端滑塊效果

在做web頁面時&#xff0c;無論PC端還是移動端&#xff0c;我們會遇到滑塊這樣的效果&#xff0c;可能我們往往會想著去網上找插件&#xff0c;其實這個效果非常的簡單&#xff0c;插件代碼的的代碼往往過于臃腫&#xff0c;不如自己動手&#xff0c;自給自足。首先看一下效果圖…

mysql的連接名是哪個文件_mysql連接名是什么

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云數據庫專家保駕護航&#xff0c;為用戶…

Activiti績效對決

每個人在學習Activiti時都會一直問到的問題&#xff0c;與軟件開發本身一樣古老&#xff1a;“它如何執行&#xff1f;”。 到現在為止&#xff0c;當您問我同樣的問題時&#xff0c;我將告訴您Activiti如何以各種可能的方式最小化數據庫訪問&#xff0c;如何將流程結構分解為“…

怎么使用CKEDITOR

出于工作需求&#xff0c;自己在網上找了個文本編輯器控件, 網址是http://ckeditor.com/ 怎么使用&#xff1f; 先插入腳本<script type"text/javascript" src"*/ckeditor.js"></script>, 然后&#xff0c;在自己的腳本里調用CKEDITOR.replac…

centos 打開pdo_mysql_centos中添加php擴展pdo_mysql步驟

pdo_mysql是php中一個mysql連接類了&#xff0c;我們可以直接使用pdo_mysql來操作數據庫這樣自己可以不需要寫數據庫操作類了&#xff0c;下面來介紹在centos中安裝pdo_mysql擴展的步驟。本文內容是以 CentOS 為例&#xff0c;紅帽系列的 Linux 方法應該都是如此&#xff0c;下…

Java線程死鎖–案例研究

本文將描述從在IBM JVM 1.6上運行的Weblogic 11g生產系統中觀察到的最新Java死鎖問題的完整根本原因分析。 此案例研究還將證明掌握線程轉儲分析技能的重要性&#xff1b; 包括用于IBM JVM Thread Dump格式。 環境規格 – Java EE服務器&#xff1a;Oracle Weblogic Server 1…

bzoj1968: [Ahoi2005]COMMON 約數研究

水題。。。 #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; #define rep(i,s,t) for(int is;i<t;i) int main(){int ans0,n;scanf("%d",&n);rep(i,1,n) ansn/i;printf("%d\n…

題目1457:非常可樂(廣度優先遍歷BFS)

題目鏈接&#xff1a;http://ac.jobdu.com/problem.php?pid1457 詳解鏈接&#xff1a;https://github.com/zpfbuaa/JobduInCPlusPlus 參考代碼&#xff1a; // // 1457 非常可樂.cpp // Jobdu // // Created by PengFei_Zheng on 22/04/2017. // Copyright © 2017 Pe…

mysql查詢某張表的所有外鍵_oracle中查詢所有外鍵引用到某張表的記錄

歡迎進入Oracle社區論壇&#xff0c;與200萬技術人員互動交流 >>進入 oracle中查詢所有外鍵引用到某張表的記錄 //查詢表的主鍵約束名 select * from user_constraints e where e.table_name表名;--輸入 //查詢所有引用到該主鍵的記錄 select b.table_name,b.column_歡迎…

BTrace for Java應用程序簡介

本文的目的是學習如何使用BTrace動態跟蹤/觀察正在運行的Java應用程序&#xff08;JDK 6&#xff09;&#xff0c;而無需更改應用程序的代碼和配置參數。 什么是BTrace&#xff1f; BTrace是一個開源項目&#xff0c;始于2007年&#xff0c;最初由A.Sundararajan和K.Balasubra…

叢銘俁 160809324 (作業1)

老師&#xff0c;助教好&#xff01;我是計科3班的叢銘俁&#xff0c;我的性格陽光開朗&#xff0c;待人大方友善&#xff0c;凡事不喜歡斤斤計較&#xff1b;本人熱心&#xff0c;喜歡樂于助人&#xff0c;也喜歡和積極向上的人交朋友。最喜歡打羽毛球&#xff0c;其次是籃球&…

mysql死鎖分析_MySQL死鎖分析

熟悉或者了解數據庫的朋友都知道鎖的概念&#xff0c;這里不做過多的解析&#xff01;鎖的種類有很多&#xff0c;不同數據庫的鎖管理方式也不同。這里主要談下MySQL innodb引擎下的死鎖。死鎖通俗的來講就是2個事務相互請求對方持有的鎖&#xff0c;這樣就會造成2個事務相互等…

在Akka中實現主從/網格計算模式

主從模式是容錯和并行計算的主要示例。 模式背后的想法是將工作劃分為相同的子任務&#xff0c;然后將其委派給從屬。 這些從節點或實例將處理工作任務&#xff0c;并將結果發送回主節點。 然后主節點將編譯從所有從節點接收到的結果。關鍵是從節點僅知道如何處理任務&#xff…

java學習筆記總略

二、正文&#xff08;一&#xff09;Java1.接口和抽象類的區別①抽象類里可以有構造方法&#xff0c;而接口內不能有構造方法。②抽象類中可以有普通成員變量&#xff0c;而接口中不能有普通成員變量。③抽象類中可以包含非抽象的普通方法&#xff0c;而接口中所有的方法必須是…

react實現路由跳轉_react實現hash路由

眾所周知&#xff0c;目前單頁面使用的路由有兩種實現方式&#xff1a;hash 模式history 模式hash 模式路由原理&#xff1a;我們先來看hash模式&#xff0c;頁面首次加載時需要在load事件中解析初始的URL&#xff0c;從而展示進入的頁面。當 # 后面的哈希值發生變化時&#xf…

Java中的Google協議緩沖區

總覽 協議緩沖區是一種用于結構化數據的開源編碼機制。 它是由Google開發的&#xff0c;旨在實現語言/平臺中立且可擴展。 在本文中&#xff0c;我的目的是介紹Java平臺上下文中協議緩沖區的基本用法。 Protobuff比XML更快&#xff0c;更簡單&#xff0c;并且比JSON更緊湊。 當…

匈牙利哦模板 二分匹配 完全匹配問題

匈牙利算法的核心思想就是 騰空間, 有條件 創造,沒條件也要創造! bool find(int x){int i,j;for (j1;j<m;j){ //掃描每個被匹配的人 if (line[x][j]true && used[j]false) //如果有關系并且還沒有標記過(這里標記的意思是這次查找曾試圖改變過的歸屬問題&a…

ThinkPHP 中驗證碼的看不清切換

<!--HTML頁面--> <!DOCTYPE html><html><head> <title></title></head><body><script type"text/javascript" src"__PUBLIC__/js/jquery-1.8.2.min.js"></script><form action"{:U(H…

mysql從表截取信息_mysql中循環截取用戶信息并插入到目標表對應的字段中

操作環境&#xff1a;有表game_list&#xff0c;字段&#xff1a;uid&#xff0c;score1&#xff0c;score2&#xff0c;seat_id&#xff0c;last_update&#xff1b;傳入參數為i_player_detail &#xff0c;傳入的值為多個用戶的id、之前分數、之后分數、座位號&#xff0c;每…