HttpServletRequest对象创建

有时需要对某个方法进行单元测试,但其传参是HttpServletRequest类型,这时便须使用代码new一个HttpServletReques对象。

因为HttpServletReques是一个接口,我们不可能去实现里面的每个方法,便可新建一个MyServlet子类,重写一些自己调用的方法,具体实现逻辑如下:

import javax.servlet.ReadListener;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import java.io.FileNotFoundException;
import java.io.IOException;

/**
 * Description:
 *
 * @author: pavelchen
 * @createDate: 2022/3/3
 */
public class MyServletREq extends HttpServletRequestWrapper {
    private byte[] body = {123, 34, 116, 101, 115, 116, 34, 58, 32, 34, 99, 115, 34, 125};

    public MyServletREq(HttpServletRequest request) {
        super(request);
    }

    @Override
    public String getMethod() {
        return "post";
    }

    @Override
    public String getRequestURI() {
        return "/engine/webhook";
    }

    public ServletInputStream getInputStream() throws FileNotFoundException {
        return new ServletInputStream() {
            private int offset = 0;

            @Override
            public boolean isFinished() {
                return offset >= body.length;
            }

            @Override
            public boolean isReady() {
                return true;
            }

            @Override
            public void setReadListener(ReadListener listener) {
            }

            @Override
            public int read() throws IOException {
                if (offset >= body.length) {
                    return -1;
                }
                int n = body[offset] & 0xff;
                offset++;
                return n;
            }
        };
    }
}

调用逻辑:

    public void test() {
        HttpServletRequest req = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
        MyServletREq req1 = new MyServletREq(req);
        webHookApi.enter(req1);
    }

这样便可对该方法进行单元测试。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值