unit-test-wiremock-rest-api

giuseppe-trisciuoglio/developer-kit · updated Apr 8, 2026

$npx skills add https://github.com/giuseppe-trisciuoglio/developer-kit --skill unit-test-wiremock-rest-api
0 commentsdiscussion
summary

Unit test external REST API integrations with WireMock HTTP mocking and request verification.

  • Stub HTTP responses with configurable status codes, headers, and JSON bodies; verify request details including headers, query parameters, and request bodies
  • Test error scenarios (4xx/5xx responses, timeouts, malformed responses) without calling real APIs or hitting rate limits
  • Use dynamic port allocation to avoid conflicts in parallel test execution; automatic cleanup between tests via JUnit
skill.md

Unit Testing REST APIs with WireMock

Overview

Patterns for testing external REST API integrations with WireMock: stubbing responses, verifying requests, error scenarios, and fast tests without network dependencies.

When to Use

  • Testing services calling external REST APIs
  • Stubbing HTTP responses for predictable test behavior
  • Testing error scenarios (timeouts, 5xx errors, malformed responses)
  • Verifying request details (headers, query params, request body)

Instructions

  1. Add dependency: WireMock in test scope (Maven/Gradle)
  2. Register extension: @RegisterExtension WireMockExtension with dynamicPort()
  3. Configure client: Use wireMock.getRuntimeInfo().getHttpBaseUrl() as base URL
  4. Stub responses: stubFor() with request matching (URL, headers, body)
  5. Execute and assert: Call service methods, validate results with AssertJ
  6. Verify requests: verify() to ensure correct API usage

If stub not matching: Check URL encoding, header names, use urlEqualTo for query params.

If tests hanging: Configure connection timeouts in HTTP client; use withFixedDelay() for timeout simulation.

If port conflicts: Always use wireMockConfig().dynamicPort().

Examples

Maven Dependencies

<dependency>
  <groupId>org.wiremock</groupId>
  <artifactId>wiremock</artifactId>
  <version>3.4.1</version>
  <scope>test</scope>
</dependency>
<dependency>
  <groupId>org.assertj</groupId>
  <artifactId>assertj-core</artifactId>
  <scope>test</scope>
</dependency>

Basic Stubbing and Verification

import com.github.tomakehurst.wiremock.junit5.WireMockExtension;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
import static com.github.tomakehurst.wiremock.client.WireMock.*;
import static org.assertj.core.api.Assertions.assertThat;

class ExternalWeatherServiceTest {

  @RegisterExtension
  static WireMockExtension wireMock = WireMockExtension.newInstance()
    .options(wireMockConfig().dynamicPort())
    .build();

  @Test
  void shouldFetchWeatherDataFromExternalApi() {
    wireMock.stubFor(get(urlEqualTo("/weather?city=London"))
      .withHeader("Accept", containing("application/json"))
      .willReturn(aResponse()
        .withStatus(200)
        .withHeader("Content-Type", "application/json")
        .withBody("{\"city\":\"London\",\"temperature\":15,\"condition\":\"Cloudy\"}")));

    String baseUrl = wireMock.getRuntimeInfo().getHttpBaseUrl();
    WeatherApiClient client = new WeatherApiClient(baseUrl);
    WeatherData weather = client.getWeather("London");

    assertThat(weather.getCity()).isEqualTo("London");
    assertThat(weather.getTemperature()).isEqualTo(15);

    wireMock.verify(getRequestedFor(urlEqualTo("/weather?city=London"))
      .withHeader("Accept", containing("application/json")));
  }
}

See references/advanced-examples.md for error scenarios, body verification, timeout simulation, and stateful testing.

Best Practices

  • Dynamic port: Prevents conflicts in parallel test execution
  • Verify requests: Ensures correct API usage by the client
  • Test errors: Cover timeouts, 4xx, 5xx scenarios
  • Focused stubs: One concern per test
  • Auto-reset: @RegisterExtension resets WireMock between tests
  • Never call real APIs: Always stub third-party endpoints

Constraints and Warnings

  • Dynamic ports required: Fixed ports cause parallel execution conflicts
  • HTTPS testing: Configure WireMock TLS settings if testing TLS connections
  • Stub precedence: More specific stubs take priority over general ones
  • Performance: WireMock adds overhead; mock at client layer for faster tests
  • API changes: Keep stubs synchronized with actual API contracts

References

Discussion

Product Hunt–style comments (not star reviews)
  • No comments yet — start the thread.
general reviews

Ratings

4.671 reviews
  • Yusuf Gupta· Dec 12, 2024

    Registry listing for unit-test-wiremock-rest-api matched our evaluation — installs cleanly and behaves as described in the markdown.

  • Pratham Ware· Dec 8, 2024

    Registry listing for unit-test-wiremock-rest-api matched our evaluation — installs cleanly and behaves as described in the markdown.

  • Evelyn Ndlovu· Dec 8, 2024

    Keeps context tight: unit-test-wiremock-rest-api is the kind of skill you can hand to a new teammate without a long onboarding doc.

  • Neel Verma· Dec 4, 2024

    unit-test-wiremock-rest-api fits our agent workflows well — practical, well scoped, and easy to wire into existing repos.

  • Yash Thakker· Nov 27, 2024

    unit-test-wiremock-rest-api reduced setup friction for our internal harness; good balance of opinion and flexibility.

  • Ava Harris· Nov 27, 2024

    unit-test-wiremock-rest-api is among the better-maintained entries we tried; worth keeping pinned for repeat workflows.

  • Kabir Jackson· Nov 27, 2024

    Solid pick for teams standardizing on skills: unit-test-wiremock-rest-api is focused, and the summary matches what you get after install.

  • Liam Ramirez· Nov 19, 2024

    We added unit-test-wiremock-rest-api from the explainx registry; install was straightforward and the SKILL.md answered most questions upfront.

  • Neel Huang· Nov 3, 2024

    unit-test-wiremock-rest-api reduced setup friction for our internal harness; good balance of opinion and flexibility.

  • Kofi Khanna· Oct 22, 2024

    I recommend unit-test-wiremock-rest-api for anyone iterating fast on agent tooling; clear intent and a small, reviewable surface area.

showing 1-10 of 71

1 / 8