Escribí un código que llama a la API del cliente de Jersey, que a su vez llama a un servicio web que está fuera de mi control. No quiero que mi prueba unitaria llame al servicio web real.¿Cómo puedo probar el código de unidad que llama a la API de Jersey Client?
¿Cuál es el mejor enfoque para escribir una prueba de unidad para el código que llama a la API de cliente de Jersey? ¿Debo usar la API del servidor Jersey para escribir un servicio web JAX-RS y luego usar el marco de prueba de Jersey para la prueba unitaria? ¿O debería burlarme de las llamadas al servicio web de Jersey? Tengo acceso a JMock. ¿O debería intentar otro enfoque?
Durante mi investigación, encontré this discussion describiendo varias opciones, pero encontré una solución completa. ¿Hay algún ejemplo de código disponible que muestre un enfoque sugerido de JUnit? No pude encontrar ninguno en la documentación de Jersey.
Aquí está el código fuente correspondiente:
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;
}
Éstos son ejemplos de código de prueba que me gustaría pasar. Me gustaría probar (1) pasar un URI válido y recuperar una cadena válida y (2) pasar un URI inválido (por cualquier motivo, inalcanzable o no autorizado) y obtener una excepción.
@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);
}
Todo lo anterior es la descripción simple de lo que hace mi código. En realidad, hay una capa encima que acepta dos URI, primero intenta llamar al primer URI y, si ese URI falla, intenta llamar al segundo URI. Me gustaría tener pruebas unitarias que cubran (1) que el primer URI tenga éxito, (2) el primer URI falla y el segundo URI tiene éxito, y (3) ambos URI fallan. Este código es lo suficientemente complejo como para probar estos diferentes escenarios usando JUnit, pero para hacer esto, o bien necesito ejecutar servicios web independientes o burlarme de las llamadas API de clientes de Jersey.
¿Qué es exactamente lo que desea probar en este método? ¿Cuáles son los criterios, esa prueba se pasa? – dbf
Bueno, si quieres hacer una prueba unitaria, entonces debes tener los servicios funcionales adecuados. – iDroid
@dbf Actualicé la pregunta con la que quiero probar (1) pasar un URI válido y recuperar una cadena válida y (2) pasar un URI inválido (por alguna razón, inalcanzable o no autorizado) y obtener una excepción espalda. – BennyMcBenBen