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

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

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

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

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;
}

這里有兩個Entity Bean用來創(chuàng)建用戶信息。他們之間的關(guān)系在xml部署描述文件中描述,他們是1對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(){

上一頁12345下一頁
軟件測試工具 | 聯(lián)系我們 | 投訴建議 | 誠聘英才 | 申請使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd