Ich habe Grails Rest API-Anwendung, die intern externe Rest apis durch Service ruft. Ich möchte externen API-Aufrufdienst bei der Durchführung von Integrationstestfällen vortäuschen. In Integrationstestfällen stelle ich eine Anfrage an die Anwendungsrest-API. Da ich die externe API nicht verspotten kann, schlägt es fehl, wenn externe API nicht erreichbar ist. So, wie man den Service verspottet, der externe APIs in den Integrations-Testfällen aufruft.Mocking in Grails Spock Integrationstest
Antwort
Fügen Sie die URL der externen API in Ihre Konfiguration ein, damit Sie sich darüber lustig machen können, sagen wir, ihr Konfigurationsschlüssel heißt myConfigValue
. Installieren Sie WireMock und einen Test-Server als JUnit Regel umfassen:
@Rule
WireMockRule mockServer = new WireMockRule(WireMockConfiguration.wireMockConfig().port(9900))
der Mock-Servers URL in Ihren Test-Feed wie in the Grails manual beschrieben:
static doWithConfig(c) {
c.myConfigValue = "http://localhost:9900/"
}
Dann WireMock API verwenden, um externe Anrufe zu validieren und Stummel der Antworten, z
stubFor(get(urlEqualTo("/binary-body"))
.willReturn(aResponse()
.withBody(new byte[] { 1, 2, 3, 4 })));
Überprüfen Sie ihre Dokumentation, was möglich ist. Es gibt Alternativen zu WireMock, aber keine hat so gut für uns gearbeitet.
Als Alternative zu WireMock, hier ist ein Blog-Beitrag mit einer anderen Bibliothek, Ratpack, um Grails 3 Anwendungen zu testen: http://kyleboon.org/blog/2015/07/18/stubbing-service-interactions-with-testing-microservices / –
Ohne Code, wie wir vorschlagen können, wo das Problem ist. –