2012-02-25 33 views
8

Tengo cierta experiencia con pruebas unitarias y burlas. En mi experiencia limitada, utilizaría los dos para probar una capa de servicio, por ejemplo, burlarse de la base de datos para eliminar las dependencias y concentrarme en la prueba unitaria de la lógica comercial.Pruebas unitarias API REST

Ahora estoy creando una implementación API de envoltura que consumirá servicios web RESTful. La estructura de resultados json que me han enviado está fuera de mis manos, por ejemplo: Twitter. Simplemente estoy construyendo el cliente para la interfaz con su api. No estoy seguro de cómo hacer una prueba unitaria del resultado json. En este momento me estoy burlando del resultado de la solicitud http con una estructura estática json. Esto asegura que la deserialización de json a mis pojos es correcta, pero me preocupan los cambios de API. ¿Qué pasa si la estructura api cambia? ¿Qué sucede si la API actualmente devuelve "título" hoy y "groovy_title" mañana? Mi prueba de unidad no captaría eso.

Desde mi punto de vista, se supone que las pruebas unitarias son rápidas. Anteriormente me burlaba de la base de datos y ahora me burlo de http, pero ¿debería utilizar la implementación concreta de http, así que me avisan inmediatamente de un cambio en la API? ¿O hay una mejor manera de abordar esta situación?

Respuesta

4

Seguiría haciendo lo que está haciendo y se burlaría de la interfaz entre su código y la API externa. Como usted señala, esto no detectará cambios en la API externa.

Puede escribir integración pruebas que realmente van al servidor externo para probar los cambios de API. Sospecho que ha separado el código que hace la interacción en su propio servidor/módulo, por lo que puede hacer ping a la API externa sin obstruirse por más de 1 capa de abstracción en su aplicación.

Nota, podría construir estas pruebas sin usar el código de su aplicación; es decir, simplemente wget o curl y hacer un análisis de los resultados ...

Los problemas con esto son numerosos; de la parte superior de mi cabeza:

Se necesita una conexión de red
lento
El servicio externo podría ser temporalmente - es decir, el fracaso podría significar cosas diferentes.
etc.