如何测试jersey2请求过滤器?

agn*_*nul 5 java unit-testing jersey-2.0

在我的jersey-2应用程序中,我使用的是一个非常简单的ContainerRequestFilter检查基本身份验证(可能重新发明轮子,但请耐心等待).过滤器有点像这样

@Override
public void filter(ContainerRequestContext context) throws IOException {
    String authHeader = context.getHeaderString(HttpHeaders.AUTHORIZATION);
    if (StringUtils.isBlank(authHeader)) {
        log.info("Auth header is missing.");
        context.abortWith(Response.status(Response.Status.UNAUTHORIZED)
                .type(MediaType.APPLICATION_JSON)
                .entity(ErrorResponse.authenticationRequired())
                .build());
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我想为它编写测试,模拟ContainerRequestContext对象.

@Test
public void emptyHeader() throws Exception {

    when(context.getHeaderString(HttpHeaders.AUTHORIZATION)).thenReturn(null);

    filter.filter(context);

    Response r = Response.status(Response.Status.UNAUTHORIZED)
            .type(MediaType.APPLICATION_JSON)
            .entity(ErrorResponse.authenticationRequired())
            .build();

    verify(context).abortWith(eq(r));

}
Run Code Online (Sandbox Code Playgroud)

eq(r)即使查看Response对象的字符串表示,它们也会在调用时失败.知道什么是错的吗?

小智 0

我不相信你需要 eq() 方法。您应该验证该上下文。abortWith(r) 被调用。我可能会遗漏一些东西,因为你没有包括 eq(r) 是什么。