简体   繁体   中英

Filter Chain with Mockito Unit Test with Servlet Request

I am using Mockito for Testing Filter,I am trying to test do filter chain method which requires HTTPServlet request as parameter, I tried mocking both Servlet Request and HTTPServlet Request but I am receiving errors, when using HTTPServlet request as null pointer exception, & with Servlet Request as it cannot be cast. Any leads is appreciated.

My Filter looks like,

public class CheckerFilter implements Filter {
private final UserDetails userDetails;
priate final UserAuthentication userAuthentication

public CheckerFilter(UserDetails userDetails,UserAuthentication userAuthentication ){
this.userDetails = userDetails;
this.userAuthentication = userAuthentication;
} 

public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)throws IOException, ServletException{
        final HttpServletRequest request = (HttpServletRequest)req;
        final String method = request.getMethod();
        final String contentType = request.getContentType();
        boolean result = evaluate();
        ....

        if(result)filter.doChain(request, res, chain);
        else res.sendRedirect('\XXX');
}
}

Test looks like,

public class CheckerFilterTest {

@InjectMocks private CheckerFilter checkerFilter;
final UserDetails userDetails =mock(UserDetails.class);
final UserAuthentication userAuthentication = mock (UserAuthentication.class);

  @Mock  ServletRequest mockServeletRequest;
  @Mock  ServletResponse mockResponse;
  @Mock HTTPServeltRequest mockHttprequest;

public void setUp (){
checkerFilter = new CheckerFilter(userDetails, userAuthentication);
}
@Test
public void Evaluate_returnsTrue(){

when(evaluate()).thenReturn(true);
checkerFilter.doFilter(mockHTTPrequest, mockResponse, mockchain);
//Error denoting mockHTTPRequest as null pointer exception.

//checkerFilter.doFilter(mockServletrequest, mockResponse, mockchain);Error mentioning Servlet Request cannot be cast to HTTPServlet Request.
}
}

The mocks need to be initialised. You can use MockitoAnnotations.initMocks(this) in the setup() method to initialise the @Mock annotated mocks. Also you have to use the http servlet request mock and not a servlet request mock as it cannot be downcasted

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM