Ho scritto codice che chiama l'API client di Jersey che a sua volta chiama un servizio Web fuori dal mio controllo. Non voglio che il mio test di unità chiami il servizio web attuale.Come si esegue il test del codice dell'unità che chiama l'API del client Jersey?
Qual è l'approccio migliore per scrivere un test di unità per il codice che chiama l'API del client Jersey? Devo utilizzare l'API del server Jersey per scrivere un servizio web JAX-RS e quindi utilizzare il Jersey Test Framework per il test dell'unità? O dovrei prendere in giro le chiamate di servizio web Jersey? Ho accesso a JMock. O dovrei provare un altro approccio?
Durante la mia ricerca, ho trovato this discussion che descrive varie opzioni, ma ho trovato una soluzione completa. Sono disponibili esempi di codice che mostrano un approccio JUnit suggerito? Non ho trovato nulla nella documentazione di Jersey.
Ecco il codice sorgente relativo:
public String getResult(URI uri) throws Exception {
// error handling code removed for clarity
ClientConfig clientConfig = new DefaultClientConfig();
Client client = Client.create(clientConfig);
WebResource service = client.resource(uri);
String result = service.accept(accept).get(String.class);
return result;
}
Ecco alcuni esempi di codice di prova che vorrei passare. Vorrei testare (1) passare un URI valido e ottenere una stringa valida indietro e (2) passare un URI non valido (per qualsiasi motivo - non raggiungibile o non autorizzato) e ottenere indietro un'eccezione.
@Test
public void testGetResult_ValidUri() throws Exception {
String xml = retriever.getResult(VALID_URI);
Assert.assertFalse(StringUtils.isBlank(xml));
}
@Test(expected = IllegalArgumentException.class)
public void testGetResult_InvalidUri() throws Exception {
retriever.getResult(INVALID_URI);
}
Tutto sopra è la semplice descrizione di ciò che fa il mio codice. In realtà, sopra c'è un livello che accetta due URI, prima prova a chiamare il primo URI, e se quell'URI fallisce, prova a chiamare il secondo URI. Mi piacerebbe avere dei test unitari che coprano (1) il primo URI ha esito positivo, (2) il primo URI fallisce e il secondo URI ha esito positivo e (3) entrambi gli URI falliscono. Questo codice è sufficientemente complesso che voglio testare questi diversi scenari usando JUnit, ma per fare questo ho bisogno sia di eseguire servizi web stand-in che di prendere in giro le chiamate API client di Jersey.
cosa esattamente vuoi testare in questo metodo? Quali sono i criteri, che test è passato? – dbf
Bene, se si desidera eseguire un test unitario, è necessario disporre dei servizi funzionali appropriati. – iDroid
@dbf Ho aggiornato la domanda con cui voglio testare (1) passare un URI valido e ottenere una stringa valida indietro e (2) passare un URI non valido (per qualsiasi ragione - non raggiungibile o non autorizzato) e ottenere un'eccezione indietro. – BennyMcBenBen