使用Cactus测试Servlet 入门

Java测试 专栏收录该内容
2 篇文章 0 订阅

使用Cactus测试Servlet 入门

Maven依赖:

<!-- Cactus使用的是JUnit3,也可以使用JUnit4,因为JUnit4兼容JUnit3 -->
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>3.8.1</version>
</dependency>
<!-- cactus测试需要的所有jar包 -->
<dependency>
    <groupId>org.apache.cactus</groupId>
    <artifactId>cactus.core.framework.uberjar.javaEE.15</artifactId>
    <version>1.8.1</version>
</dependency>

要测试的Servlet

package com.mxh.ch14.cactus.demo;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getWriter().write("hello");
    }
}

ServletTest类

package com.mxh.ch14.cactus.demo;

import java.io.IOException;

import javax.servlet.ServletException;

import org.apache.cactus.ServletTestCase;
import org.apache.cactus.WebRequest;
import org.apache.cactus.WebResponse;

import com.mxh.ch14.cactus.demo.HelloServlet;

// 注意,使用的是JUnit3
public class HelloServletTest extends ServletTestCase {
    // 要测试的Servlet
    private HelloServlet servlet;

    // 覆写基类的方法,在测试方法前运行,在服务端上运行
    @Override
    protected void setUp() throws Exception {
        servlet = new HelloServlet();
    }

    // 在testDoGet方法前运行,运行在客户端
    public void beginDoGet(WebRequest request) {

    }

    public void testDoGet() throws ServletException, IOException {
        servlet.doGet(request, response);
    }

    // 在testDoGet方法后运行,运行在客户端
    public void endDoGet(WebResponse response) {
        String expectResp = "hello";
        assertEquals(expectResp, response.getText());
    }

    // 覆写基类的方法,在测试方法后运行,在服务端上运行
    @Override
    protected void tearDown() throws Exception {

    }
}

Cactus配置文件

文件名:cactus.properties

内容(服务器的访问路径):
cactus.contextURL=http://localhost:8080/JunitBook

web.xml

<!-- 配置ServletTestRedirector,这个Servlet是Cactus框架自带的 -->
<servlet>
    <servlet-name>ServletTestRedirector</servlet-name>
    <servlet-class>org.apache.cactus.server.ServletTestRedirector</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>ServletTestRedirector</servlet-name>
    <!-- 这里要求是固定的,这是默认名称"/ServletRedirector" -->
    <url-pattern>/ServletRedirector</url-pattern>
</servlet-mapping>

运行:
启动服务器,打开测试类,右键-> Run As -> JUnit Test

其它问题:

  1. 为什么使用的是JUnit3?这是因为Cactus框架已经十几年没有更新了,但仍然在用。如果改用JUnit4的注解,那么begin,test,end方法将无法区分,所以也没有更新到JUnit4的必要。
  2. HelloServlet不用配置URL吗?不用,因为我们不需要使用URL来访问HelloServlet,在测试类中new出来一个对象就可以了。
  3. 为什么要配置ServletTestRedirector?因为我们需要通过它进行请求发送和接收请求,并用它产生的容器管理对象对我们测试的servlet对象字段赋值。

还有一个比较严重的问题就是我们要手动启动服务器,不能做到自动化测试。要解决这一问题要使用嵌入式服务器Jetty。

在测试类中添加该方法

// Jetty是Cactus框架自带的
public static Test suite() {
    // 与配置文件中的内容相同,就不需要配置文件; 
    System.setProperty("cactus.contextURL", "http://localhost:8080/JunitBook");
    TestSuite suite = new TestSuite();
    suite.addTestSuite(HelloServletTest.class);
    return new Jetty5xTestSetup(suite);
}

此外,web.xml中ServletTestRedirector配置也不需要了。

运行:
打开测试类,右键-> Run As -> JUnit Test

  • 0
    点赞
  • 0
    评论
  • 1
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

MXHKKK

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值