Skip to content

SpectoLabs/hoverfly-java

Folders and files

NameName
Last commit message
Last commit date

Latest commit

5df3a7b · Feb 3, 2025
Feb 3, 2025
Feb 23, 2022
Jan 18, 2025
Jan 1, 2025
Feb 3, 2025
Jan 26, 2025
Jan 1, 2025
May 4, 2020
Jan 1, 2025
Sep 26, 2023
Mar 2, 2016
Jul 13, 2024
Jan 1, 2025
Feb 3, 2025
Jul 2, 2018
Dec 5, 2016
Mar 2, 2016
Feb 3, 2025
Jan 2, 2018
Feb 3, 2025

Repository files navigation

Hoverfly Java - Easy Creation of Stub Http Servers for Testing

CircleCI Read the Docs Codecov Known Vulnerabilities Maven Central

A Java native language binding for Hoverfly, a Go proxy which allows you to simulate http services in your unit tests. Another term for this is Service Virtualisation.

Features

  • Simulation of http/https services

  • Strict or loose http request matching based on URL, method, body and header combinations

  • Fluent and expressive DSL for easy generation of simulated services

  • Automatic marshalling of objects into JSON during request / response body generation

  • Create simulations by capturing live traffic

  • Hoverfly is a proxy, so you don’t need to alter the host that you make requests to

  • Multiple hosts / services per single instance of Hoverfly

  • Https automatically supported, no extra configuration required

  • Supports Mutual TLS authentication capture

  • Interoperable with standard Hoverfly JSON, making it easy to re-use data between Java and other native language bindings.

  • Use externally managed Hoverfly cluster for API simulations

  • Request verification

  • Response templating

  • Stateful capture / simulation

  • JUnit 5 extension

Documentation

Full documentation is available here

Maven Dependency

<dependency>
    <groupId>io.specto</groupId>
    <artifactId>hoverfly-java</artifactId>
    <version>0.19.0</version>
    <scope>test</scope>
</dependency>

Example

Create API simulation using capture mode

// Capture and output HTTP traffic to json file
@ClassRule
public static HoverflyRule hoverflyRule = HoverflyRule.inCaptureMode("simulation.json");


// After the capturing, switch to inSimulationMode to spin up a stub server
@ClassRule
public static HoverflyRule hoverflyRule = HoverflyRule.inSimulationMode(defaultPath("simulation.json"));

// Or you can use both approaches at once. If json file not present in capture mode, if present in simulation mode
@ClassRule
public static HoverflyRule hoverflyRule = HoverflyRule.inCaptureOrSimulationMode("simulation.json");

Create API simulation using DSL

@ClassRule
public static HoverflyRule hoverflyRule = HoverflyRule.inSimulationMode(dsl(
    service("www.my-test.com")
        .get("/api/bookings/1")
        .willReturn(created("http://localhost/api/bookings/1"))
));

@Test
public void shouldBeAbleToGetABookingUsingHoverfly() {
    // When
    final ResponseEntity<String> getBookingResponse = restTemplate.getForEntity("http://www.my-test.com/api/bookings/1", String.class);

    // Then
    assertEquals(bookFlightResponse.getStatusCode(), CREATED);
    assertEquals(bookFlightResponse.getHeaders().getLocation(), "http://localhost/api/bookings/1");
}

Some code examples for the DSL are available here.

More code examples for the DSL using request matchers can be found here.

Verify requests

// Verify that at least one request to a specific endpoint with any query params
hoverflyRule.verify(service(matches("*.flight.*")).get("/api/bookings").anyQueryParams(), atLeastOnce());

// Verify that an external service/dependency was not called
hoverflyRule.verifyZeroRequestTo(service(matches("*.flight.*")));

// Verify all the stubbed requests were made at least once
hoverflyRule.verifyAll();

Contributions

Contributions are welcome!

To submit a pull request you should fork the Hoverfly-Java repository, and make your change on a feature branch of your fork.

As of v0.10.2, hoverfly binaries are no longer stored in the repository. You should run ./gradlew clean test once to cache the binaries for development with your IDE.

If you have forked this project prior to v0.10.2, please re-fork to get a slimmer version of the repository.

Issues

Feel free to raise an issues on Github.

License

Apache License version 2.0.

(c) iOCO 2024.