gpt4 book ai didi

java - 如何使用 jUnit 对 Servlet 过滤器进行单元测试? ServletRequest、ServletResponse、FilterChain

转载 作者:行者123 更新时间:2023-12-04 01:14:46 28 4
gpt4 key购买 nike

如何使用 JUnit 正确覆盖过滤器?

@SlingFilter(order = -700, scope = SlingFilterScope.REQUEST)
public class LoggingFilter implements Filter {

private final Logger logger = LoggerFactory.getLogger(getClass());

@Override
public void doFilter(final ServletRequest request, final ServletResponse response,
final FilterChain filterChain) throws IOException, ServletException {

final SlingHttpServletRequest slingRequest = (SlingHttpServletRequest) request;
logger.debug("request for {}, with selector {}", slingRequest
.getRequestPathInfo().getResourcePath(), slingRequest
.getRequestPathInfo().getSelectorString());

filterChain.doFilter(request, response);
}

@Override
public void init(FilterConfig filterConfig) {}

@Override
public void destroy() {}

}

最佳答案

调用 doFilter 传递模拟 ServletRequest、ServletResponse 和 FilterChain 作为其参数。

@Test
public void testDoFilter() {
LoggingFilter filterUnderTest = new LoggingFilter();
MockFilterChain mockChain = new MockFilterChain();
MockServletRequest req = new MockServletRequest("/test.jsp");
MockServletResponse rsp = new MockServletResponse();

filterUnderTest.doFilter(req, rsp, mockChain);

assertEquals("/test.jsp",rsp.getLastRedirect());
}
在实践中,您需要将设置移动到 @Before setUp() 中。方法,多写 @Test方法来覆盖所有可能的执行路径。
你可能会使用像 JMock 这样的模拟框架或 Mockito创建模拟,而不是假设 MockModeService等我在这里用过。
这是一种单元测试方法,而不是集成测试。您只是在测试被测单元(和测试代码)。

关于java - 如何使用 jUnit 对 Servlet 过滤器进行单元测试? ServletRequest、ServletResponse、FilterChain,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63706202/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com