知识点

相关文章

更多

最近更新

更多

基于servlet容器测试cactus使用教程--junit单元测试

2019-03-05 15:11|来源: 网路

Cactus是一个基于JUnit框架的简单测试框架,用来单元测试服务端Java代码。Cactus框架的主要目标是能够单元测试服务端的使用Servlet对象的Java方法如HttpServletRequest,HttpServletResponse,HttpSession等


该项目主页:http://jakarta.apache.org/cactus/


1、导入jar(先导入以下几个,缺少的以后再加)



2、创建Servlet的测试类

/**
 * 只要写了一个类继承于 ServletTestCase,就会拥有相应的request等方法
 * 需要注意的一点就是:此时junit4中的Annotation全部不起作用
 * 就得按照junit3的方法来:setUp和tearDown用来做初始化和结束释放资源
 * testXX用来做测试
 * @author Administrator
 *
 */
public class TestLoginServletByCactus extends ServletTestCase {
  private LoginServlet servlet;
  //begin是在客户端执行的
  public void beginNoSession(WebRequest request) {
    request.setAutomaticSession(false);
    request.addParameter("username", "kh");
  }
    
  //在服务器端执行
  public void setUp() {
    servlet = new LoginServlet();
  }
  public void testNoSession() {
    //服务器端执行
    Assert.assertFalse(servlet.isLogin(request));
    Assert.assertEquals(request.getParameter("username"),"kh");
      
  }
    
  public void testSessionNoUser() {
    Assert.assertFalse(servlet.isLogin(request));
  }
    
  public void testSessionHasUser() {
    session.setAttribute("loginUser", new User());
    Assert.assertTrue(servlet.isLogin(request));
  }
    
  public void testDoGet() throws ServletException, IOException {
    servlet.doGet(request, response);
  }
    
  //客户端执行
  public void endDoGet(WebResponse resp) {
    try {
       Assert.assertEquals(resp.getTables()[0].getCellAsText(0,0),"111");
       Assert.assertEquals(resp.getTables()[0].getCellAsText(0,1),"222");
    } catch (SAXException e) {
       e.printStackTrace();
    }
  }
  
}


3、创建动态web环境并且配置web.xml

<servlet>
  <servlet-name>ServletRedirector</servlet-name>
  <servlet-class>org.apache.cactus.server.ServletTestRedirector</servlet-class>
  </servlet>
  <servlet-mapping>
  <servlet-name>ServletRedirector</servlet-name>
  <url-pattern>/ServletRedirector</url-pattern>
  </servlet-mapping>


本文转自网络


相关问答

更多
  • @BeforeClass,@AfterClass 只能修饰static方法,相对于具体类只执行一次。 @Before,@After 才是修饰一般 (非static) 方法的,在每次 new 一个对象的时候都会执行一次
  • 你自己测试只是意思一下而已,不够正规用JUnit测试会有测试案例和测试结果,方便给领导汇报工作作为依据而且听说有的公司先写测试案例,后实现功能,这种情况下就必须要用了 查看原帖>> 希望采纳
  • 需要你初始化连接池再做单元测试。 一般的方法是写一些专为测试用的连接池。
  • 你自己测试只是意思一下而已,不够正规用JUnit测试会有测试案例和测试结果,方便给领导汇报工作作为依据而且听说有的公司先写测试案例,后实现功能,这种情况下就必须要用了
  • 最好用jnuit4.x的,使用方便,而且支持新特性。你先试试能不能解决
  • 尝试HttpUnit ,尽管您可能会最终编写比“单元测试”(单一类)更多的“集成测试”(模块)的自动化测试。 Try HttpUnit, although you are likely to end up writing automated tests that are more 'integration tests' (of a module) than 'unit tests' (of a single class).
  • 如果可能,请遵循skaffman的建议。 如果不是,或者如果要测试Servlet的行为作为前端控制器而不是它们内部的业务逻辑,则可以使用: 的HtmlUnit 硒 仙人掌 (但我不知道它是否已经支持TestNG) Follow skaffman's advice if possible. If not, or if you want to test the behaviour of the servlets as front-end controllers, rather than the business ...
  • 不熟悉w / Cactus,但你应该可以使用JPDA而不是JDWP。 简单地在JVM args中放置这样的东西(在Eclipse运行配置,java cmd行中,或者Cactus接受其JVM的args): -agentlib:JDWP =运输= dt_socket,地址=本地主机:1234,服务器= Y,暂停= Y (如果JRE版本<5,则使用“-Xrunjdwp:”而不是“-agentlib:jdwp”) 然后无论你在哪里开始,它都会等你连接。 然后在Eclipse中创建一个新的调试配置作为远程Java应用 ...
  • 我不知道JUnitEE,但您可以尝试使用HttpUnit http://httpunit.sourceforge.net/index.html进行单元测试servlet。 看不出它与JUnit 4不兼容的任何原因。 I don't know JUnitEE but you can try to use HttpUnit http://httpunit.sourceforge.net/index.html for unit testing servlets. Cannot see any reason it ...
  • 测试按顺序执行。 你不应该依赖这个事实,因为这表明你没有编写纯单元测试并创建了反模式(在测试方面)。 每个测试必须是它自己独立的工作, After和Before初始化之外没有外部依赖。 我相信每个测试都是在自己的线程中执行的,再次回到你的测试套件而不是纯粹的单元测试。 我担心的是,如果在真实环境中正确使用(如文档所述),那些测试可能会导致不存在的问题。 单元测试仅验证函数的一小部分,通常是一个可能的逻辑分支。 如果要测试系统集成,则需要执行所谓的集成测试。 此外,如果您正在寻求进行多线程测试,我强烈建议: ...