java - 如何为此使用包装器的日志过滤器编写单元测试
问题描述
我很难为此过滤器编写单元测试:
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
if (request instanceof HttpServletRequest && response instanceof HttpServletResponse) {
ContentCachingResponseWrapper requestWrapper = new ContentCachingResponseWrapper((HttpServletRequest) request);
ContentCachingResponseWrapper responseWrapper = new ContentCachingResponseWrapper((HttpServletResponse) response);
try {
chain.doFilter(requestWrapper, responseWrapper);
useCase.audit(requestWrapper, responseWrapper);
} catch(Throwable t){
useCase.audit(requestWrapper, responseWrapper, t);
throw t;
}
} else {
chain.doFilter(request, response);
}
}
我写了这样的东西,但它不起作用:
private Filter filterBeingTested;
private UseCase mockUseCase;
private FilterChain mockFilterChain;
private ContentCachingResponseWrapper requestWrapper;
private ContentCachingResponseWrapper responseWrapper;
@Before
public void setUp() throws Exception {
filterBeingTested = new Filter();
mockUseCase = mock(UseCase.class);
filterBeingTested.setUseCase(mockUseCase);
mockFilterChain = mock(FilterChain.class);
requestWrapper = mock(ContentCachingResponseWrapper.class);
responseWrapper = mock(ContentCachingResponseWrapper.class);
}
@Test
public void doFilter() throws IOException, ServletException {
HttpServletRequest request = mock(HttpServletRequest.class);
HttpServletResponse response = mock(HttpServletResponse.class);
FilterChain spiedFilterChain = spy(this.mockFilterChain);
UseCase spiedUseCase = spy(this.mockUseCase);
filterBeingTested.doFilter(request, response, mockFilterChain);
verify(spiedFilterChain).doFilter(eq(requestWrapper), eq(responseWrapper));
verify(spiedUseCase).audit(eq(uuid),eq(requestWrapper), eq(responseWrapper));
}
解决方案
推荐阅读
- answer-set-programming - Clingo:如何做“如果 p 导致 UNSAT 则 q”。
- c# - 如何在 NET 5 MVC 中使用单元格作为输入来更新数据
- java - 请求的资源 [/authenticateTheUser] 不可用
- java - Python中的Base64编码和Java中的解码问题
- firebase - 我在尝试创建个人资料时无法显示姓名,为什么?
- r - 将具有设置截距和斜率的自定义回归线添加到 ggplot
- javascript - 如何将具有数组值的对象转换为字符串并插入我的html
- python - 通过多个标签过滤或选择熊猫中两行之间的数据
- python - 如果第一个响应是 Foo,如何使用 Python 请求发出另一个请求?
- sql - 组合不同(冗长)SQL 语句的列的最简单方法 - MSSQL