用Cactus来测试J2ee应用

Eleanor ·
更新时间:2024-11-15
· 579 次阅读

unit是当前流行的测试框架,它能够让开发人员很方便的编写测试单元,可以使他们"放心"地开发。但是现在很多的应用都是基于j2ee的,代码都是在服务器端的容器里面运行,这个使测试带来了一些麻烦。对于普通的jsp,servlet用Junit来测试好像已经不是那么方便,对于EJB来说,特别是2.0版本,很多接口都是Local Interface,没有办法进行分布式的测试。那么我们如何进行这些代码的测试呢?Apache为我们提供了一个强大的工具 Cactus!它是一套简单,易于使用的服务器端测试框架,可以使开发人员很轻松的测试服务器端的程序,他们会说:"哦,是这么简单"。Cactus是Junit的一个扩展,但是它又和Junit有一些不同。Cactus的测试分为三种不同的测试类别,JspTestCase,ServletTestCase,FilterTestCase,而不是像Junit一种TestCase。Cactus的测试代码有服务器端和客户端两个部分,他们协同工作。那我们为什么不用Junit来做测试呢?主要有一下几个理由:

EJB2.0中的Local interface ,不允讯远程调用。用Junit不好测试,而Cactus的redirector位于服务器端,可以和EJB运行在一个容器中,这使得它可以直接访问Local Interface。

一般EJB或者servlet,jsp都是运行在服务器上,如果你使用junit测试的话,你的测试是在客户端,这使的运行环境和测试环境处于不同的系统环境中,这个有时候会不同的测试结果。 在一个EJB的应用中,一般都会有一些前端应用来访问EJB,例如:jsp,servlet,javabean。这意味着你需要一个测试框架来测试这些前端的组件。Cactus提供了所有这些组件的测试方法。哦,太棒了。 Cactus和ant很好的结合在一起,可以很容易的完成自动化测试,减少了很多工作量。当然,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用来创建用户信息。他们之间的关系在xml部署描述文件中描述,他们是1对1的关系。

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(){



j2ee

需要 登录 后方可回复, 如果你还没有账号请 注册新账号