首页 > 解决方案 > 如何为此使用包装器的日志过滤器编写单元测试

问题描述

我很难为此过滤器编写单元测试:

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));
    }

标签: javaunit-testingfiltermockitowrapper

解决方案


推荐阅读