Inleiding tot Hoverfly in Java

1. Overzicht

In dit artikel zullen we de Hoverfly Java-bibliotheek bekijken, die een gemakkelijke manier biedt om echte API-stubs / simulaties te maken.

2. Maven afhankelijkheden

Om Hoverfly te gebruiken, moeten we een enkele Maven-afhankelijkheid toevoegen:

 io.specto zweefvlieg-java 0.8.1 

De nieuwste versie is hier te vinden.

3. Simuleren van een API

Eerst zullen we Hoverfly configureren om in de simulatiemodus te draaien. De eenvoudigste manier om een ​​simulatie te definiëren, is door een DSL te gebruiken.

Laten we beginnen met een eenvoudig voorbeeld door het Zweefvliegregel voorbeeld:

openbare statische laatste HoverflyRule rule = HoverflyRule.inSimulationMode (dsl (service ("// www.baeldung.com") .get ("/ api / courses / 1") .willReturn (success (). body (jsonWithSingleQuotes ("{' id ':' 1 ',' name ':' HCI '} "))));

De Simulatiebron klasse biedt een dsl methode voor het initiëren van de API-definitie. Ook, HoverflyDSL‘S onderhoud methode stelt ons in staat om een ​​eindpunt en bijbehorende aanvraagpaden te definiëren.

Dan bellen we zal terugkeren om aan te geven welke reactie we ervoor terug willen krijgen. We gebruikten ook succes methode van ResponseBuilder om de antwoordstatus en het hoofdgedeelte in te stellen.

4. Met behulp van JUnit om uit te proberen

Stubbed API kan eenvoudig worden getest met JUnit.

Laten we een eenvoudige test maken door een HTTP-verzoek te verzenden en te kijken of het het eindpunt bereikt:

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

We gebruikten Spring Web-modules RestTemplate class-instantie om een ​​HTTP-verzoek te verzenden.

5. Vertragingen toevoegen

Vertragingen kunnen globaal worden toegevoegd voor een bepaalde HTTP-methode of voor een specifieke API-aanroep.

Hier is het voorbeeld van een code-instellingsvertraging op verzoeken met de POST-methode:

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

6. Matcher aanvragen

HoverflyMatchers factory class biedt verschillende matchers waaronder exacte overeenkomst en globMatch voor URL's. Voor HTTP-body biedt het.

Voor HTTP-lichamen biedt het JSON / XML exacte overeenkomst en JSONPath / XPath wedstrijden.

Standaard is het exacte overeenkomst matcher wordt gebruikt voor zowel URL- als body-matching.

Hier is een voorbeeld van het gebruik van verschillende matchers:

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 (success ()) .put ("/ api / student / 2") .body (matchesXPath ("/ student / name")) .willReturn (success ())); )

In dit voorbeeld wedstrijden methode controleert URL met globMatch waarmee zoeken met jokertekens mogelijk is.

Dan begint met controleert of het verzoekpad begint met '/api/leerling“. We gebruikten ieder matcher om alle mogelijke waarden in de paginaquery-parameter toe te staan.

De equalsToJson matcher zorgt ervoor dat de body-payload overeenkomt met de exacte JSON die hier wordt gegeven. De wedstrijdenJsonPath methode voor het controleren met een element op een bepaald JSON-pad bestaat of niet.

Evenzo equalsToXml komt overeen met de XML die is opgegeven in de hoofdtekst van het verzoek met degene die hier wordt gegeven. De matchesXPath komt overeen met een hoofdtekst met een XPath-expressie.

7. Conclusie

In deze korte tutorial hebben we het gebruik van de Hoverfly Java-bibliotheek besproken. We hebben gekeken naar het simuleren van HTTP-services, DSL voor het configureren van endpoints, het toevoegen van vertragingen en het gebruik van verzoekmatchers. We hebben ook gekeken naar het testen van deze services met JUnit.

Zoals altijd zijn codefragmenten, zoals altijd, te vinden op GitHub.