¿Cómo se burlan las numerosas dependencias necesarias para las pruebas de integración?Burlarse de las pruebas de integración
Uso Mockito para mis pruebas de unidad "pura". 'Pure' en este caso significa probar una sola clase, burlarse de todas sus dependencias. Hermosa.
Ahora vienen las pruebas de integración. Digamos que en este caso, una prueba de integración será probar algo como esto:
- mensaje se coloca en una cola
- mensaje es 'procesada'
- mensaje de respuesta se pone en una cola de respuesta
Digamos también que el procesamiento que ocurre en el paso 2 es algo serio. Se basa en muchas interacciones de bases de datos, en múltiples servicios externos, el sistema de archivos, todo tipo de cosas. También hay muchos efectos secundarios que provocarán el flujo, por lo que no puedo simplemente asegurarme de que la respuesta sea correcta, necesito verificar los efectos secundarios.
Cada una de estas dependencias está envuelta por una sola clase de servicio sin estado, lo que las hace agradables y burlables.
¿Cómo lo están manejando?
Me encantaría usar Mockito para poder verificar los efectos secundarios que tendrá el flujo anterior. Sin embargo, la documentación de Mocktio (y en gran medida su implementación) parece luchar enérgicamente contra su uso en contextos distintos a las pruebas unitarias "puras". He tratado de seguir este camino, pero
- Es difícil llenar los datos del trozo (ya que hay mucha de ella)
- Es difícil tener Primavera inyectar esos casos tropezados en mis habas
- Es difícil para 'reiniciar' los simulacros para que pueda verificar un conjunto diferente de interacciones sin borrar los talones.
EDITAR
Yo sé que podría manejar el tema de la base de datos con algo así como una instancia HSQLDB, pero aún existe la cuestión de los servicios externos. Para la repetibilidad no puedo confiar en que esos servicios estén funcionando, estar en el estado que requiero, etc. La única opción que veo es burlarse de ellos.
Whatdaya do?
Solo para aclarar, ya que las pruebas de integración se pueden tomar de dos maneras. Parece que te refieres a las pruebas de integración, prueba que los componentes de conexión funcionan bien juntos (esencialmente probando las API). Pero, a veces la integración se refiere a un extremo a otro, por lo que no se burlaría de su servicio y realmente le permitiría llegar a la base de datos. Esta aclaración puede ayudar con la respuesta. Consulte http://stackoverflow.com/questions/4904096/whats-the-difference-between-unit-functional-acceptance-and-integration-test para obtener una mayor aclaración de los tipos –
. realmente se aplica a cualquier prueba (integración o extremo a extremo) que requiera muchas dependencias externas. Por ejemplo, podría reemplazar mis apéndices de base de datos con una instancia de HSQLDB, pero todavía tengo todos los otros servicios. Editaremos la pregunta un poco para aclararlo ... –
Entonces, ¿cómo resolvió el problema de la burla eventualmente? – Pupsik