Cactus可以在下面几种情况下使用:
- 测试Servlet以及任何使用了像HttpServletRequest,HttpServletResponse,……这样的对象的代码。使用ServletTestCase。
- 测试Filter以及任何使用了像FilterConfig,……这样的对象的代码。使用FilterTestCase。
- 测试JSP 。使用ServletTestCase或JspTestCase。
- 测试Taglibs以及任何使用了像PageContext,……这样的对象的代码。使用JspTestCase。
- 测试EJB。ServletTestCase或JspTestCase或FilterTestCase。
Cactus的使用也是非常简单的,你写的测试类只需继承ServletTestCase或者JspTestCase、FilterTestCase(它们都继承了JUnit的TestCase)。写好测试代码后需要启动web容器,然后执行测试代码。
接下来使用一个例子来讲解:
首先是写一个简单的Servlet:
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class SampleServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest theRequest,
HttpServletResponse theResponse) throws IOException {
PrintWriter pw = theResponse.getWriter();
theResponse.setContentType("text/html");
pw.print("<html><head/><body>");
pw.print("username:" + theRequest.getParameter("username"));
pw.print("</body></html>");
}
public void doPost(HttpServletRequest theRequest,
HttpServletResponse theResponse) throws IOException {
doGet(theRequest, theResponse);
}
public String checkMethod(HttpServletRequest theRequest) {
return theRequest.getMethod();
}
}
然后写一个TestCase:
public class TestSampleServlet extends ServletTestCase {
public void testReadServletOutputStream() throws IOException {
SampleServlet servlet = new SampleServlet();
servlet.doGet(request, response);
}
public void beginReadServletOutputStream(WebRequest theRequest) {
theRequest.addParameter("username", "alex", WebRequest.POST_METHOD);
}
public void endReadServletOutputStream(WebResponse theResponse)
throws IOException {
String expected = "<html><head/><body>username:alex</body></html>";
String result = theResponse.getText();
assertEquals(expected, result);
}
public void beginPostMethod(WebRequest theRequest) {
theRequest.addParameter("username", "alex", WebRequest.POST_METHOD);
}
public void testPostMethod() {
SampleServlet servlet = new SampleServlet();
assertEquals("POST", servlet.checkMethod(request));
assertEquals("alex", request.getParameter("username"));
assertNull(request.getParameter("password"));
}
}
接下来需要配置cactus.property文件: 这个文件主要是让cactus测试的客户端能够找到服务端:
cactus.contextURL=http\://localhost\:8080/testweb
注意冒号是特殊字符
最后, 需要配置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">
<filter>
<filter-name>FilterRedirector</filter-name>
<filter-class>
org.apache.cactus.server.FilterTestRedirector
</filter-class>
</filter>
<filter-mapping>
<filter-name>FilterRedirector</filter-name>
<url-pattern>/FilterRedirector</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>ServletRedirector</servlet-name>
<servlet-class>
org.apache.cactus.server.ServletTestRedirector
</servlet-class>
</servlet>
<servlet>
<servlet-name>JspRedirector</servlet-name>
<jsp-file>/jspRedirector.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>ServletRedirector</servlet-name>
<url-pattern>/ServletRedirector</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>JspRedirector</servlet-name>
<url-pattern>/JspRedirector</url-pattern>
</servlet-mapping>
</web-app>
这个里面没有任何需要配置的, 就是配置了一些JSP, Servlet, Filter等的转发器。
最后就是先运行服务器, 然后运行testcase, 正常的话, 就会显示绿色的小条条。
源码。
浙公网安备 33010602011771号