Introduksjon til Hoverfly i Java

1. Oversikt

I denne artikkelen ser vi på Hoverfly Java-biblioteket - som gir en enkel måte å lage ekte API-stubber / simuleringer på.

2. Maven-avhengigheter

For å bruke Hoverfly, må vi legge til en enkelt Maven-avhengighet:

 io.specto hoverfly-java 0.8.1 

Den nyeste versjonen finner du her.

3. Simulering av et API

Først konfigurerer vi Hoverfly til å kjøre i simuleringsmodus. Den enkleste måten å definere en simulering på er å bruke en DSL.

La oss starte med et enkelt eksempel ved å sette i gang HoverflyRule forekomst:

offentlig statisk endelig HoverflyRule regel = HoverflyRule.inSimulationMode (dsl (service ("// www.baeldung.com") .get ("/ api / kurs / 1") .willReturn (suksess (). body (jsonWithSingleQuotes ("{') id ':' 1 ',' name ':' HCI '} "))));

De Simuleringskilde klasse gir en dsl metode for å starte API-definisjonen. Også, HoverflyDSL‘S service metoden lar oss definere et sluttpunkt og tilknyttede forespørselsbaner.

Så ringer vi vil returnere for å oppgi hvilket svar vi ønsker å få tilbake. Vi brukte også suksess Metode av ResponseBuilder for å stille svarstatus og kropp.

4. Bruke JUnit for testing

Stubbed API kan enkelt testes ved hjelp av JUnit.

La oss lage en enkel test som sender en HTTP-forespørsel og ser om den når endepunktet:

responseEntity courseResponse = restTemplate.getForEntity ("// www.baeldung.com/api/courses/1", String.class); assertEquals (HttpStatus.OK, courseResponse.getStatusCode ()); assertEquals ("{\" id \ ": \" 1 \ ", \" name \ ": \" HCI \ "}", courseResponse.getBody ());

Vi brukte Spring Web-moduler RestTemplate klasseinstans for å sende en HTTP-forespørsel.

5. Legge til forsinkelser

Forsinkelser kan legges til globalt, for en bestemt HTTP-metode eller for en spesifikk API-samtale.

Her er eksemplet på forsinkelse av kodeinnstilling på forespørsler med POST-metoden:

SimulationSource.dsl (service ("// www.baeldung.com") .post ("/ api / courses") .willReturn (success ()). AndDelay (3, TimeUnit.SECONDS) .forMethod ("POST"))

6. Be om matcher

HoverflyMatchers fabrikk klasse gir flere matchere inkludert nøyaktig treff og globMatch for nettadresser. For HTTP-kropp gir det.

For HTTP-organer gir den det JSON / XML eksakt samsvar og JSONPath / XPath fyrstikker.

Som standard er nøyaktig treff matcher brukes til både URL og body matching.

Her er eksempel på bruk av forskjellige matchere:

SimulationSource.dsl (service (matches ("www. * Dung.com")) .get (startsWith ("/ api / student")) .queryParam ("page", any ()) .willReturn (success ()). post (equalsTo ("/ api / student")) .body (equalsToJson (jsonWithSingleQuotes ("{'id': '1', 'name': 'Joe'}"))) .willReturn (success ()) .put ("/ api / student / 1") .body (matchesJsonPath ("$. name")) .willReturn (success ()) .post ("/ api / student") .body (equalsToXml ("2John")). willReturn (suksess ()) .put ("/ api / student / 2") .body (matchesXPath ("/ student / name")) .willReturn (suksess ())); )

I dette eksemplet, fyrstikker metoden sjekker URL med globMatch som tillater jokertegnsøk.

Deretter begynner med sjekker om forespørselsstien starter med “/api/student“. Vi brukte noen matcher for å tillate alle mulige verdier i sideparameter.

De tilsvarer ToJson matcher sørger for at kroppsnyttelasten samsvarer med den eksakte JSON gitt her. De samsvarer med JsonPath metoden for å sjekke med et element på en bestemt JSON-bane eksisterer eller ikke.

På samme måte, tilsvarer ToXml samsvarer med XML som er gitt i forespørsel, med den som er gitt her. De matchesXPath matcher en kropp med et XPath-uttrykk.

7. Konklusjon

I denne raske opplæringen diskuterte vi bruken av Hoverfly Java-biblioteket. Vi så på å simulere HTTP-tjenester, DSL for å konfigurere endepunkter, legge til forsinkelser og bruk av forespørselsmatchere. Vi så også på å teste disse tjenestene ved hjelp av JUnit.

Som alltid kan kodebiter, som alltid, bli funnet på GitHub.