java过滤链,mockito单元测试,servlet请求

rur96b6h  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(332)

我正在使用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.
}
}
osh3o9ms

osh3o9ms1#

模拟需要初始化。您可以在setup()方法中使用mockitoannotations.initmocks(this)来初始化@mock annotated mocks。您还必须使用httpservlet请求模拟,而不是servlet请求模拟,因为它不能被降级

相关问题