Ho letto di test sui contratti guidati dai consumatori con framework come Pact. I concetti sono chiari quando si parla di test tra due servizi che la comunicazione tramite HTTP.
Abbiamo il servizio A (il nostro consumatore):
- Scrivi un test che indica quando POST
{'foo': 'bar'}
al servizio B, il servizio B risponde con un 201. - Condividi il contratto con il servizio B.
Abbiamo anche il servizio B (il nostro fornitore):
- Utilizzando il contratto fornito dal Servizio A, riesegui la richiesta contro il Servizio B. Se il Servizio B non risponde con un 201 (probabilmente a causa del Service B che implementa una modifica anomala), il test fallisce.
Ora immaginiamo di avere un'architettura in cui il servizio A invia lo stesso messaggio {'foo': 'bar'}
su una coda di messaggi per essere elaborato dal servizio B. Come verifichiamo il contratto? Il servizio B non risponde al servizio A, quindi non possiamo testare una risposta. Certamente non vorremmo testare gli effetti collaterali del Servizio B, in quanto il Servizio A non è a conoscenza dell'implementazione del Servizio B (e quindi non può scrivere un contratto guidato dal consumatore).
Forse in questo scenario, le responsabilità sono invertite; Il servizio A è il fornitore e il servizio B è il consumatore. Anche in questo caso, come può il consumatore scrivere un test del provider senza alcuna conoscenza dell'implementazione? Non c'è nessuna risposta da confrontare con