亚洲好骚综合-亚洲黄色录像-亚洲黄色网址-亚洲黄色网址大全-99久久99久久-99久久99久久精品国产

您的位置:軟件測(cè)試 > 開(kāi)源軟件測(cè)試 > 開(kāi)源單元測(cè)試工具 > Cactus
用Cactus來(lái)測(cè)試J2ee應(yīng)用
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2012/11/29 14:52:41 ] 推薦標(biāo)簽:

unit是當(dāng)前流行的測(cè)試框架,它能夠讓開(kāi)發(fā)人員很方便的編寫(xiě)測(cè)試單元,可以使他們"放心"地開(kāi)發(fā)。但是現(xiàn)在很多的應(yīng)用都是基于j2ee的,代碼都是在服務(wù)器端的容器里面運(yùn)行,這個(gè)使測(cè)試帶來(lái)了一些麻煩。對(duì)于普通的jsp,servlet用Junit來(lái)測(cè)試好像已經(jīng)不是那么方便,對(duì)于EJB來(lái)說(shuō),特別是2.0版本,很多接口都是Local Interface,沒(méi)有辦法進(jìn)行分布式的測(cè)試。那么我們?nèi)绾芜M(jìn)行這些代碼的測(cè)試呢?Apache為我們提供了一個(gè)強(qiáng)大的工具 Cactus!它是一套簡(jiǎn)單,易于使用的服務(wù)器端測(cè)試框架,可以使開(kāi)發(fā)人員很輕松的測(cè)試服務(wù)器端的程序,他們會(huì)說(shuō):"哦,是這么簡(jiǎn)單"。Cactus是Junit的一個(gè)擴(kuò)展,但是它又和Junit有一些不同。Cactus的測(cè)試分為三種不同的測(cè)試類別,JspTestCase,ServletTestCase,F(xiàn)ilterTestCase,而不是像Junit一種TestCase。Cactus的測(cè)試代碼有服務(wù)器端和客戶端兩個(gè)部分,他們協(xié)同工作。那我們?yōu)槭裁床挥肑unit來(lái)做測(cè)試呢?主要有一下幾個(gè)理由:

EJB2.0中的Local interface ,不允訊遠(yuǎn)程調(diào)用。用Junit不好測(cè)試,而Cactus的redirector位于服務(wù)器端,可以和EJB運(yùn)行在一個(gè)容器中,這使得它可以直接訪問(wèn)Local Interface。

一般EJB或者servlet,jsp都是運(yùn)行在服務(wù)器上,如果你使用junit測(cè)試的話,你的測(cè)試是在客戶端,這使的運(yùn)行環(huán)境和測(cè)試環(huán)境處于不同的系統(tǒng)環(huán)境中,這個(gè)有時(shí)候會(huì)不同的測(cè)試結(jié)果。
在一個(gè)EJB的應(yīng)用中,一般都會(huì)有一些前端應(yīng)用來(lái)訪問(wèn)EJB,例如:jsp,servlet,javabean。這意味著你需要一個(gè)測(cè)試框架來(lái)測(cè)試這些前端的組件。Cactus提供了所有這些組件的測(cè)試方法。哦,太棒了。
Cactus和ant很好的結(jié)合在一起,可以很容易的完成自動(dòng)化測(cè)試,減少了很多工作量。當(dāng)然,junit也提供這樣的支持。
前面是對(duì)Cactus作了一個(gè)大致的介紹,接下來(lái)我們用一個(gè)實(shí)際的例子來(lái)運(yùn)用一下這個(gè)強(qiáng)大的測(cè)試框架。首先我們需要一個(gè)被測(cè)試的對(duì)象,在這里我們選用EJB2.0 CMP.我們做一個(gè)簡(jiǎn)單的用戶管理。一下一些主要的代碼,來(lái)進(jìn)行一些分析。

UserHome.java

package usersystem;

import javax.ejb.*;
import java.util.*;

public interface UserHome extends javax.ejb.EJBLocalHome {
public User create(String name, String password) throws CreateException;
public Collection findAll() throws FinderException;
public User findByPrimaryKey(String name) throws FinderException;
}
User.java
package usersystem;

import javax.ejb.*;
import java.util.*;
public interface User extends javax.ejb.EJBLocalObject {
public String getName();
public void setPassword(String password);
public String getPassword();
public void setUserInfo(UserInfo userInfo);
public UserInfo getUserInfo();
public void setName(String name);
}

UserInfoHome.java
package usersystem;

import javax.ejb.*;
import java.util.*;

public interface UserInfoHome extends javax.ejb.EJBLocalHome {
public UserInfo create(String name, String email, String address, String tel) throws

CreateException;
public UserInfo findByPrimaryKey(String name) throws FinderException;
}

這里有兩個(gè)Entity Bean用來(lái)創(chuàng)建用戶信息。他們之間的關(guān)系在xml部署描述文件中描述,他們是1對(duì)1的關(guān)系。

UserManagerLocal.java

package usersystem;

import javax.ejb.*;
import java.util.*;

public interface UserManagerLocal extends javax.ejb.EJBLocalObject {
public void addUser(String name, String password, String email, String address, String tel);
public Collection findAll() ;
public void delAll();
public void delByName(String name);
public User findByName(String name) ;
}

UserManagerBean.java

package usersystem;

import javax.ejb.*;
import javax.rmi.PortableRemoteObject;
import javax.naming.*;
import java.util.*;

public class UserManagerBean implements SessionBean {
SessionContext sessionContext;
public void ejbCreate() throws CreateException {
/**@todo Complete this method*/
}

public void ejbRemove() {
/**@todo Complete this method*/
}
public void ejbActivate() {
/**@todo Complete this method*/
}
public void ejbPassivate() {
/**@todo Complete this method*/
}
public void setSessionContext(SessionContext sessionContext) {
this.sessionContext = sessionContext;
}

/**
* 添加用戶
* @param name 用戶姓名
* @param password 密碼
* @param email 電子郵件
* @param address 地址
* @param tel 電話
*/
public void addUser(String name, String password, String email, String address, String tel) {

try{
UserHome userHome=getUserHome();
User user=userHome.create(name,password) ; //create user entity
UserInfoHome userInfoHome=getUserInfoHome();
UserInfo userInfo=userInfoHome.create(name,email,address,tel) ;// create userinfo

entity
user.setUserInfo(userInfo) ;

}catch(Exception e){

throw new javax.ejb.EJBException (e.toString());
}

}

/**
* 返回UserHome接口
* @return userHome
*/
private UserHome getUserHome(){

上一頁(yè)12345下一頁(yè)
軟件測(cè)試工具 | 聯(lián)系我們 | 投訴建議 | 誠(chéng)聘英才 | 申請(qǐng)使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd
主站蜘蛛池模板: 五月深爱婷婷 | 国产精品三级一区二区 | 久久99中文字幕伊人 | 国产精品久久久久9999高清 | 成人毛片免费视频 | 黄网站免费看 | www.99热.com| 午夜大片免费男女爽爽影院久久 | 亚洲va欧美va国产va天堂影 | 日本三级黄色录像 | 日韩精品一区二区三区中文 | 成人看片黄a在线看 | 天天干天天草天天 | 亚洲va在线va天堂va手机 | 中国国产xxxxhd | 九九成人免费视频 | 欧美日韩不卡视频一区二区三区 | 天天干干干| 国产日韩欧美中文 | 欧美视频在线一区 | 狠狠燥| japanoldman老头同性 | 国产一区二区自拍视频 | 日本在线视频精品 | 日韩亚洲人成网站 | 色综合网站国产麻豆 | 日本一本在线播放 | 日韩a无吗一区二区三区 | 妞干网手机免费视频 | 欧美一级专区免费大片野外交 | 国产精品成人观看视频网站 | 丝袜美腿精尽福利网站 | 亚洲 欧美 国产 中文 | 天天爱天天做久久天天狠狼 | 国产成人免费视频 | 中文字幕一区二区三区免费视频 | 天天操夜夜欢 | 激情男女无遮无挡动态图 | 不卡欧美 | 五月婷婷伊人 | 人人舔人人插 |