1.解压cactus安装文件到某一目录下
2.将lib下的jar拷贝到项目\web-inf\lib 下
3.创建cactus.properties文件,并加入classpath(可选,在这里是为为了可以直接用eclipse的junit进行测试,可用eclipse配置路径)
4.我需要被测试的类
/*
* 创建日期 2005-12-9
*
* TODO 要更改此生成的文件的模板,请转至
* 窗口 - 首选项 - Java - 代码样式 - 代码模板
*/
package com.test.web;
import java.io.FileNotFoundException;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
// import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.jdom.JDOMException;
// import com.ca.website.mainpage.MainPageSupport;
// import com.error.ErrorProcesser;
// import com.jem.orm.sql.BsSQLHandler;
// import com.jem.orm.sql.BsSqlXmlPaser;
import com.jem.transdata.BsFormData;
import com.jem.transdata.BsFormTable;
// import com.orm.util.SQLStatementIDS;
public class LoginEdge extends HttpServlet {
* 测试 by wst
* @param request
* @return
*/
public boolean isValidUser(HttpServletRequest request) {
String username = request.getParameter("username");
String password = request.getParameter("password");
if (username == null || password == null || !username.equals("justin")
|| !password.equals("123456")) {
return false;
} else {
return true;
}
}
}
6.我的测试类
/*
* 创建者 wst302
*
* 创建日期 2006-1-10
*
* 文档作用:测试登陆
*
* 版本:
*
*/
package com.test;
import org.apache.cactus.ServletTestCase;
import org.apache.cactus.WebRequest;
import com.test.web.LoginEdge;
public class LoginEdgeTest extends ServletTestCase {
public void beginValidUser(WebRequest webRequest) {
webRequest.addParameter("username", "justin");
webRequest.addParameter("password", "123456");
}
public void testValidUser() {
LoginEdge loginServlet = new LoginEdge();
assertTrue(loginServlet.isValidUser(request));
}
public void beginInValidUser(WebRequest webRequest) {
webRequest.addParameter("username", "guest");
webRequest.addParameter("password", "guest");
}
public void testInValidUser() {
LoginEdge loginServlet = new LoginEdge();
assertFalse(loginServlet.isValidUser(request));
}
}
7.在web.xml需要如下配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
<servlet-name>ServletRedirector<servlet-name>
<servlet-class>org.apache.cactus.server.ServletTestRedirector<servlet-class>
<servlet>
<servlet>
<servlet-name>ServletTestRunner<servlet-name>
<servlet-class>org.apache.cactus.server.runner.ServletTestRunner<servlet-class>
<servlet>
<servlet-mapping>
<servlet-name>ServletRedirector<servlet-name>
<url-pattern>/ServletRedirector</url-pattern>
<servlet-mapping>
<servlet-mapping>
<servlet-name>ServletTestRunner<servlet-name>
<url-pattern>/ServletTestRunner</url-pattern>
<servlet-mapping>
<!--Test by wst -->
</web-app>
8.在cactus.properties需要如下配置
cactus.contextURL = http://localhost/3UFAssist
cactus.servletRedirectorName = ServletRedirector
cactus.enableLogging=true
9开始测试
输入以下http://localhost/3UFAssist/ServletTestRunner?suite=com.test.LoginEdgeTest
将出现测试结果:
<?xml version="1.0" encoding="UTF-8" ?>
- <testsuites>
- <testsuite name="com.test.LoginEdgeTest" tests="2" failures="0" errors="0" time="0.625">
<testcase name="testValidUser" time="0.5" />
<testcase name="testInValidUser" time="0.016" />
</testsuite>
</testsuites>
Trackback: http://tb.blog.youkuaiyun.com/TrackBack.aspx?PostId=575360
1. 基于测试方法的名字,ServletTestCase将在TestCase中寻找并执行名为beginXxx的方法;
2. 在beginXxx方法执行完成之后,ServletTestCase打开一个与转向器servlet的HTTP连接。除了发送在begionXxx中增加的任何请求参数,Cactus发送一些内部参数来指定在服务器上执行哪一个测试(和哪一个方法)。
3. 当转向器servlet收到请求,它检查内部参数并实例化一个服务器中正确测试案例的新拷贝。一旦其类被实例化,转向器servlet使用反射来复制标准的servlet变量request,response等等)到新的测试案例实例中。
4. 一旦服务器端测试案例被完全初始化,服务器端执行即开始。其setUp(),testXxx()和testDown()方法在此时被执行。(注意这些方法只在测试案例的拷贝中才被执行,这些测试案例运行在服务器上。)
5. 一旦测试完成了执行过程,在客户端的测试拷贝向转向器servlet发出另一个请求以询问测试结果。其转向器servlet从应用程序的scope变量中既得结果,并发送到
客户端。如果任何异常或者失败保存在结果中,它们将被重新招聘,使JUnit测试运行器正常地对它们进行日志记录。如果结果返回成功,客户端将执行一个最后的endXxx方法。
endXxx方法得到一个WebResponse参数。WebResponse对象包含了任何写向客户端的响应数据。endXxx能使用WebResponse对象的方法对响应的内容执行断言。测试执行在endXxx返回结果后表示完成。