Wenn wir den Build ausführen, generiert das Plugin automatisch eine Testklasse namens ContractVerifierTest, die unsere BaseTestClass erweitert und in /target/generated-test-sources/contracts/ einfügt. In Ihrem Vertrag können Sie ihn wie folgt verwenden (Beispiel für groovy DSL): Ist es wirklich verbrauchergetriebener Vertrag? Die Vertragsdatei wird innerhalb des Herstellercodes erstellt. Wie kann der Verbraucher den Vertrag definieren? Meiner Meinung nach sollte dieser Vertrag für CDC außerhalb des Quellcodes der Erzeuger platziert und aus Quellen, die zwischen Verbrauchern und Erzeugern geteilt werden, dorthin eingeführt werden. Testklassen werden auf der Grundlage von Verträgen generiert, die in src/main/resources/contracts definiert sind. Solche Verträge können mit Groovy Sprache umgesetzt werden. Hier ist der Beispielvertrag zum Hinzufügen eines neuen Kontos. In einem Test können Sie einen ContractVerifierMessageExchange einfügen, um Nachrichten zu senden und zu empfangen, die dem Vertrag entsprechen. Fügen Sie dann @AutoConfigureMessageVerifier zu Ihrem Test hinzu. Das folgende Beispiel zeigt, wie Dies geschieht: Die @Builder-Anmerkung fügt Builder-APIs basierend auf dem Builder-Muster für Ihre Klasse hinzu. Wenn Sie mit Pact arbeiten, mag die folgende Diskussion vertraut erscheinen. Nicht wenige Benutzer sind daran gewöhnt, eine Trennung zwischen dem Körper zu haben und die dynamischen Teile eines Vertrags einzustellen. Wenn Sie in der Cloud-nativen Architektur arbeiten, in der CI- und CD-Pipeline konfiguriert sind, wird Ihr CI-Build durch diesen Testfehler durch einen Fehler aufgebrochen.
Infolgedessen würde ein Vertragsverstoß des Verbrauchers niemals in die Produktion eingebracht. Das folgende Beispiel zeigt einen Groovy DSL-Vertrag mit XML im Antworttext: Bevor wir mit dem Schreiben der Verträge beginnen, müssen wir Maven konfigurieren. Wenn Sie Spring Cloud Stream verwenden möchten, denken Sie daran, eine Testabhängigkeit auf org.springframework.cloud:spring-cloud-stream hinzuzufügen, wie folgt: Wenn test- oder stub-generation stattfindet, wird der Inhalt der Datei request.json und response.json an den Text einer Anforderung oder Antwort übergeben. Der Name der Datei muss eine Datei mit Speicherort relativ zu dem Ordner sein, in dem der Vertrag liegt. Der baseUrl-Wert wird allen Mockaufrufen vorangestellt, und die stubs()-Methode nimmt ein Stubpfadressourcenmuster als Argument an. Im vorherigen Beispiel wird der unter /stubs/resource.json definierte Stub in den Mock-Server geladen. Wenn die RestTemplate aufgefordert wird, example.org/ zu besuchen, werden die Antworten als unter dieser URL deklariert. Es können mehr als ein Stubmuster angegeben werden, und jedes kann ein Verzeichnis (für eine rekursive Liste aller json), ein fester Dateiname (wie im vorherigen Beispiel) oder ein Ant-Stilmuster sein. Das JSON-Format ist das normale WireMock-Format, über das Sie auf der WireMock-Website nachlesen können. Um die Konfiguration zu bestehen, können Sie eine stubrunner.yml-Datei im aktuellen Arbeitsverzeichnis, in einem Unterverzeichnis namens config oder in der Datei .spring-cloud erstellen. Die Datei könnte dem folgenden Beispiel für die Lokalinstallation von Stubs ähneln: Spring Cloud Contract Stub Runner enthält eine Implementierung, die Sie für WireMock erweitern können: org.springframework.cloud.contract.stubrunner.provider.wiremock.WireMockHttpServerStubConfigurer. In der configure-Methode können Sie eine eigene benutzerdefinierte Konfiguration für den angegebenen Stub bereitstellen.
Der Anwendungsfall könnte WireMock für die angegebene Artefakt-ID auf einem HTTPS-Port starten. Das folgende Beispiel zeigt, wie dies geschieht: Wenn ein Vertrag definiert ist, müssen Sie als Produzent die generierten Tests bestehen lassen, damit die Stubs veröffentlicht werden können. Es gibt Fälle, in denen Sie die Blockierung der Verbraucher aufheben möchten, damit sie die Stubs abrufen können, bevor Ihre Tests tatsächlich bestanden werden. In diesem Fall sollten Sie solche Verträge als in Bearbeitung festlegen. Weitere Informationen hierzu finden Sie im Abschnitt Verträge in Bearbeitung.
Comments are closed.