2014-10-27 23 views
5

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?

risposta

0

Non credo che sia necessario il metodo eq(). Dovresti verificare quel contesto. abortWith (r) è stato chiamato. Potrei mancare qualcosa però perché non hai incluso cosa sia eq (r).

+0

'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

+0

Il mio punto era che dovresti mettere direttamente l'oggetto nel metodo giusto? Quel metodo non richiede un Matcher per quanto ne so. –

Problemi correlati