我正在使用mockito测试filter,我正在尝试测试do filter-chain方法,该方法需要httpservlet请求作为参数,我尝试同时模拟servlet请求和httpservlet请求,但我收到错误,当使用httpservlet请求作为空指针异常时,&使用servlet请求,因为它不能被强制转换。任何线索都很感激。
我的过滤器看起来像,
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');
}
}
测试结果是,
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.
}
}
1条答案
按热度按时间osh3o9ms1#
模拟需要初始化。您可以在setup()方法中使用mockitoannotations.initmocks(this)来初始化@mock annotated mocks。您还必须使用httpservlet请求模拟,而不是servlet请求模拟,因为它不能被降级