5
在我的泽西-2应用程序中,我使用了一个非常简单的ContainerRequestFilter
,它将检查基本身份验证(可能重新发明轮子,但请耐心等待)。过滤去有点像这样如何测试jersey2请求过滤器?
@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());
}
}
现在,我想编写一个测试吧,嘲讽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));
}
此测试失败的eq(r)
通话,即使在看Response
对象它们是相同的字符串表示。任何想法有什么不对?
'eq()'来自Mockito。当然,我可以没有它,比如'verify(context).abortWith(any())',但是测试会传递所有错误,而不仅仅是'UNAUTHORIZED'。不是我想要的/我正在测试的。 – agnul 2017-09-15 08:22:15
我的观点是你应该直接把对象放入方法中吗?据我所知,该方法不需要匹配器。 – 2017-09-16 19:24:24