13. Consumer Driven Contracts - Das Prinzip_
13
Consumer
Provider
•Consumer erstellt Contract
• abgestimmte Syntax
•Provider implementiert Contract
•Contracts werden bei jedem Build geprüft
•Kommunikation!
14. 14
Consumer Driven Contracts - Das Prinzip_
•Fragen
• Wo werden die Contracts gespeichert?
• In welcher Form werden die Contracts gehalten?
• Wie werden die Contracts ausführbar gemacht?
• Was wird an Infrastruktur benötigt?
• Wie betten sich die Tests in die CI-/CD-Pipeline ein?
• Welche Art der Kommunikation kann ich so testen?
34. 34
•Maven-Plugin generiert Stubs
• Wiremock-Stubs
• Stubs werden mit classifier -stubs in Maven Repo geladen
•Tests starten und verwenden Stubs
Spring Cloud Contract_
35. Spring Cloud Contract_
35
lokal
Provider
Consumer
1. fork
Provider-Fork
2. add contract
3. publish stubs
locally
4. write tests
using stubs
5. submit PR
6. write implementation
7. write test base class
8. build and publish stubs
•Workflow
36. 36
•Provider: Maven-Plugin generiert
Stubs und Tests
• Modi für Testgenerierung:
MockMvc, Explicit
• Tests erben von einer Basis-Klasse,
die selbst implementiert werden
muss -> Hier wird Infrastruktur
initialisiert
•Provider muss nicht laufen bei Ausführung der Tests!
Spring Cloud Contract_
37. Spring Cloud Contract_
37
lokal
Provider
Consumer
1. fork
Provider-Fork
2. add contract
3. publish stubs
locally
4. write tests
using stubs
5. submit PR
6. write implementation
7. write test base class
8. build and publish stubs
9. use stubs
•Workflow
39. Spring Cloud Contract_
39
lokal
Provider
Consumer
1. fork
Provider-Fork
2. add contract
3. publish stubs
locally
4. write tests
using stubs
5. submit PR
6. write implementation
7. write test base class
8. build and publish stubs
9. use stubs
•Workflow
40. 40
•Spring RestDocs zum Generieren der Contracts / Stubs
• Provider-driven
•pact files als Contract
Spring Cloud Contract_
41. Fazit_
41
•Einbindung in CI/CD ist elementar
• Continuous Deployment passt am besten
• Stark branch-basiertes Arbeiten hinderlich
•Spring Cloud Contract bietet etwas mehr im Messaging-
Bereich
•Pact ist technologie-unabhängig
•Pact: DSL wird im Consumer-Projekt verwendet
• Keine global verwendbaren Stubs
•SCC: DSL wird per Fork ins Provider-Projekt eingebracht
• Generierte Stubs mit Provider versioniert
• global verwendbar