简单的例子:

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    HttpServletRequest req = (HttpServletRequest) request;
    HttpServletResponse res = (HttpServletResponse) response;
    res.addCookie(cookie);
    chain.doFilter(request, response);
}

如果HttpServletResponse对象是从ServletResponse创建的,我如何验证是否对该对象调用了addCoockie方法.

推荐答案

将模拟值HttpServletResponse传递给过滤器,然后进行验证.

Custom filter that we need to test

import javax.servlet.*;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class CustomFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse res = (HttpServletResponse) response;
        res.addCookie(new Cookie("name", "value")); // filter call addCookie method which need to be verified
        filterChain.doFilter(request, response);
    }

    @Override
    public void destroy() {

    }
}

Test implementation

import org.junit.jupiter.api.Test;

import javax.servlet.FilterChain;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import static org.mockito.Mockito.*;

public class FilterTest {
    CustomFilter customFilter = new CustomFilter();

    @Test
    public void testDoFilter() throws Exception {
        HttpServletRequest request = mock(HttpServletRequest.class);
        //create mock of HttpServletResponse object
        HttpServletResponse response = mock(HttpServletResponse.class);
        FilterChain filterChain = mock(FilterChain.class);

        //pass HttpServletResponse object to the filter
        customFilter.doFilter(request, response, filterChain);

        //verify that addCookie method was executed with correct value
        verify(response, times(1)).addCookie(argThat(cookie -> "name".equals(cookie.getName()) && "value".equals(cookie.getValue())));
    }
}

Java相关问答推荐

虚拟线程似乎在外部服务调用时阻止运营商线程

@从类文件中删除JsonProperty—Java

AlarmManager没有在正确的时间发送alert

在Java Stream上调用collect方法出现意外结果

上下文初始化期间遇到异常-使用Java配置配置HibernateTemplate Bean时

Java FX中的河内之塔游戏-在游戏完全解决之前什么都不会显示

Exe4j创建的应用程序无法再固定在任务栏Windows 11上

如何判断一个矩阵是否为有框矩阵?

解释左移在Java中的工作原理

如何让JVM在SIGSEGV崩溃后快速退出?

声明MessageChannel Bean的首选方式

S,要对Java复制构造函数深度克隆所有属性进行单元测试,最可靠的方法是什么?

虚拟线程应该很快消亡吗?

允许同时执行两个方法,但不能同时执行这两个方法

每次我需要时创建和关闭数据库连接会有什么效果吗?

从12小时开始的日期模式

使用迭代器遍历HashMap不会因IF条件而停止

按长度排序字符串数组

在数组中查找素数时出现逻辑错误

睡眠在 Spring Boot 中