unit-test-wiremock-rest-api▌
giuseppe-trisciuoglio/developer-kit · updated Apr 8, 2026
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
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
- Add dependency: WireMock in test scope (Maven/Gradle)
- Register extension:
@RegisterExtension WireMockExtensionwithdynamicPort() - Configure client: Use
wireMock.getRuntimeInfo().getHttpBaseUrl()as base URL - Stub responses:
stubFor()with request matching (URL, headers, body) - Execute and assert: Call service methods, validate results with AssertJ
- 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:
@RegisterExtensionresets 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
- WireMock Documentation
- WireMock Stubbing Guide
references/advanced-examples.md- Error scenarios, body verification, timeouts
Discussion
Product Hunt–style comments (not star reviews)- No comments yet — start the thread.
Ratings
4.6★★★★★71 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