Nella mia applicazione jersey-2 sto usando un semplicissimo ContainerRequestFilter
che controlla l'autenticazione di base (probabilmente reinventando la ruota, ma portami con me). Filtro va un po 'come questoCome testare i filtri di richiesta 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());
}
}
Ora mi piacerebbe scrivere un test per esso, beffardo l'oggetto 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));
}
Questo test fallisce la chiamata eq(r)
, anche se guardando la rappresentazione di stringa degli Response
oggetti che sono gli stessi. Qualche idea di cosa c'è che non va?
'eq()' deriva da Mockito. Certo, potrei farne a meno, qualcosa come 'verify (context) .abortWith (any())', ma poi il test passerebbe per tutti gli errori invece di solo 'UNAUTHORIZED'. Non quello che voglio/quello che sto testando. – agnul
Il mio punto era che dovresti mettere direttamente l'oggetto nel metodo giusto? Quel metodo non richiede un Matcher per quanto ne so. –