用Cactus来测试J2ee应用2011-08-14 IBM 韩伟Junit是当前最流行的测试框架,它能够让开发人员很方便的编写测试单元,可以使他们"放心"地开发 。但是现在很多的应用都是基于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;
}