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