Ir al contenido

Cómo mockear una dependencia entre microservicios en local

Tu micro llama a otro servicio que no quieres —o no puedes— levantar: está detrás de la VPN, tarda en arrancar, o simplemente no te interesa para lo que estás probando. Lo mockeas: algo responde por él con lo que tú definas.

La parte que suele doler no es fabricar la respuesta, sino conseguir que tu micro llame al mock en vez de al servicio real sin tocar la configuración del repositorio. En Aseptic eso es un conmutador: la dependencia se resuelve como mock y el motor reescribe la URL al arrancar.

En el panel de Dependencias del escenario, pon esa dependencia en mock. A partir de ahí, las llamadas de tu micro a ese core las atiende el servidor de mocks de Aseptic.

Tienes dos caminos, según prefieras adelantarte o reaccionar:

Proactivo (desde OpenAPI). En la sección Mocks, crea un stub para ese servicio. Si declara OpenAPI, selecciona la operación y Aseptic genera una plantilla del cuerpo; si no, lo escribes a mano. Ver Sección Mocks.

Reactivo (desde una llamada real). Arranca el escenario y deja que tu micro llame. La petición aparece en el dock Llamadas mock; conviértela en stub con un clic y edítala. Ver Dock de Llamadas mock.

Un endpoint puede tener varias variantes (una 200, una 500, con latencia…). La que se sirve se marca con el conmutador. Los cambios se aplican con recarga en caliente: no hace falta reiniciar nada.

Puedes comprobar qué respondería un mock sin levantar el escenario: en el CLI, aseptic mock probe <método> <ruta>.

Resuelven problemas distintos y a menudo conviven con esto. La diferencia práctica es quién decide a dónde llama tu micro.

WireMock (o cualquier servidor de stubs) hace lo mismo que el servidor de mocks de Aseptic: atiende peticiones HTTP con respuestas que tú defines. Lo que no hace es apuntar tu servicio hacia él: sigues teniendo que cambiar la URL en la configuración del micro, para cada micro y cada vez que quieras volver al servicio real. Si ya tienes stubs de WireMock, no los tires: son la misma idea, y el trabajo que ahorra Aseptic es el del cableado.

Pact y el contract testing no son mocks de conveniencia: verifican que consumidor y proveedor siguen entendiéndose, y su sitio natural es la CI. Un mock local te deja seguir trabajando; un contrato te avisa de que el proveedor cambió. No se sustituyen.

Testcontainers levanta la dependencia de verdad en un contenedor, atada al ciclo de vida del test: nace y muere con él. Es lo que quieres cuando lo que pruebas es la integración real con esa pieza. No es lo que quieres cuando el servicio no cabe en un contenedor, cuando depende de datos que no tienes, o cuando lo que necesitas es que falle con un 500 a la tercera llamada.

En resumen: mock cuando la respuesta te da igual y lo que pruebas es tu camino; dependencia real cuando lo que pruebas es la integración; contrato para que no se te rompa por debajo. Aseptic deja elegir entre las tres por dependencia, sin editar el repositorio.