您的位置:軟件測(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