Cactus借助Jetty测试Servlet
来源:互联网 发布:视频效果软件 编辑:程序博客网 时间:2024/05/16 05:47
完整版见https://jadyer.github.io/2013/07/11/cactus-servlet/
这是一个WebProject,但不需要web.xml,因为用不到它
首先是待测试的LoginServlet.java
package com.jadyer.servlet;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class LoginServlet extends HttpServlet {private static final long serialVersionUID = 6655227641354075528L;@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {PrintWriter out = response.getWriter();out.println("<table><tr><td>username</td><td>password</td></tr></table>");out.flush();out.close();}public boolean login(HttpServletRequest request){String loginUser = (String)request.getSession().getAttribute("loginUser");if(null==loginUser || !"http://blog.csdn.net/jadyer".equals(loginUser)){System.out.println("用户[" + loginUser + "]登录失败");return false;}System.out.println("用户[" + loginUser + "]登录成功");return true;}}
下面是Cactus编写的位于test SourceFolder下的测试用例LoginServletTest.java
其实它和上一篇文章"Cactus入门"里面的测试用例是一样的
package com.jadyer.servlet;import java.io.IOException;import javax.servlet.ServletException;import junit.framework.Assert;import org.apache.cactus.ServletTestCase;import org.apache.cactus.WebRequest;import org.xml.sax.SAXException;import com.meterware.httpunit.WebResponse;public class LoginServletTest extends ServletTestCase {private LoginServlet loginServlet;//它是在ServerSide执行的public void setUp(){loginServlet = new LoginServlet();}//beginXxx()方法是在ClientSide执行的//如果想在testLogin()中获取到这里request添加的username参数,那么这个方法就应该命名为beginLogin()public void beginLogin(WebRequest request){request.addParameter("username", "Jadyer");}//它是在ServerSide执行的public void testLogin(){//获取GET参数Assert.assertEquals(request.getParameter("username"), "Jadyer");//登录失败//session.setAttribute("loginUser", "玄玉<http://blog.csdn.net/jadyer>");Assert.assertFalse(loginServlet.login(request));//登录成功session.setAttribute("loginUser", "http://blog.csdn.net/jadyer");Assert.assertTrue(loginServlet.login(request));}//它是在ServerSide执行的public void testDoGet() throws ServletException, IOException {loginServlet.doGet(request, response);}//endXxx()方法是在ClientSide执行的,该方法对应testDoGet()public void endDoGet(WebResponse resp) throws SAXException {//这里使用com.meterware.httpunit.WebResponse,而非org.apache.cactus.WebResponse,前者提供了很多增强功能//但在使用httpunit中的WebResponse时,要额外借助Tidy.jar作为辅助包Assert.assertEquals(resp.getTables()[0].getCellAsText(0,0), "username");Assert.assertEquals(resp.getTables()[0].getCellAsText(0,1), "password");}}
最后是JUnit3.8编写的测试套件TestAllUseJetty.java(为什么这么用,详见注释)
package com.jadyer.servlet;import junit.framework.Test;import junit.framework.TestSuite;import org.apache.cactus.extension.jetty.Jetty5xTestSetup;/** * Jetty中使用Cactus测试Servlet步骤如下 * @see 0)Cactus下载地址为http://archive.apache.org/dist/jakarta/cactus/ * @see 关于Jetty的简单用法,可参考我的博文http://blog.csdn.net/jadyer/article/details/9299485 * @see 1)加入所依赖的jar * @see aspectjrt-1.5.3.jar * @see cactus.core.framework.uberjar.javaEE.14-1.8.1.jar * @see cactus.integration.ant-1.8.1.jar * @see cactus.integration.shared.api-1.8.1.jar * @see commons-codec-1.6.jar * @see commons-discovery-0.4.jar * @see commons-httpclient-3.1.jar * @see commons-logging-1.1.jar * @see geronimo-j2ee-management_1.0_spec-1.1.jar * @see httpunit-1.6.jar * @see nekoHTML.jar * @see xercesMinimal.jar * @see org.mortbay.jetty-5.1.9.jar(取自cactus-1.8.1-bin.zip) * @see 2)编写测试用例 * @see 这里即LoginServletTest.java * @see 3)编写测试套件 * @see 我们要在beginXxx之前启动Jetty,而Cactus不支持JUnit4中的annotation * @see 所以为了实现类似@BeforeClass的功能,我们就借助JUnit3.8中测试套件,最后测试时直接运行此测试套件即可 * @see 关键JUnit3.8和JUnit4的测试套件编写规则,详见http://blog.csdn.net/jadyer/article/details/6013743 * @create Jul 5, 2013 4:05:00 PM * @author 玄玉<http://blog.csdn.net/jadyer> */public class TestAllUseJetty {public static Test suite(){//此时就不需要cactus.properties文件了,并且注意这里的值就不能以下划线结尾了,而端口则可任意设定//另外在web.xml中也不需要配置org.apache.cactus.server.ServletTestRedirector及其映射了System.setProperty("cactus.contextURL", "http://127.0.0.1:8088/testJettyAndCactus");TestSuite suite = new TestSuite();suite.addTestSuite(LoginServletTest.class);//记得要引入org.mortbay.jetty-5.1.9.jar,否则会报告java.lang.ClassNotFoundException: org.mortbay.jetty.Serverreturn new Jetty5xTestSetup(suite);}}
- Cactus借助Jetty测试Servlet
- Eclipse IDE下 Cactus + Jetty 对 Servlet 的测试
- cactus测试servlet
- jetty+cactus完成容器内测试
- cactus+jetty+eclipse测试时的Connection refused问题
- Maven+Jetty+HttpClient测试Servlet
- Java单元测试Junit(四)使用Cactus测试Servlet
- Cactus容器测试入门
- easymock,cactus测试controller
- 使用Cactus+Jetty进行servelt的单元测试
- main app方式启动servlet容器(Jetty) 测试web程序
- j2ee 测试:cactus(仙人掌)
- ant集成cactus测试框架
- Cactus容器测试 ---浏览器方式
- cactus
- cactus
- 使用cactus实现对servlet进行单元测试
- 使用cactus实现对servlet进行单元测试
- SRM 584div2
- 以php程序员的角度全面解读.cvs格式文件
- 座标转换:TWD67<->TWD97
- 我的linux复习之二几个简单的命令
- SQL基础——视图
- Cactus借助Jetty测试Servlet
- 【零起点学通C++】构造函数与默认构造函数的代码及析构函数的相关笔记
- HDOJ--2602--Bone Collector【背包问题】
- Mutex實現單實例,你真的搞懂了嗎?來看看吧
- 算法导论 4.1-2
- hdu2196树形dp
- 说说大型高并发高负载网站的系统架构(更新)
- android 显示特殊符号
- HOWTO: Unpack, Edit, and Re-Pack Boot Images