WireMock Spring Boot drastically simplifies testing HTTP clients in Spring Boot & Junit 5 based integration tests.
WireMock Spring Boot library drastically simplifies WireMock configuration in a Spring Boot and JUnit 5 application.
WireMockServer
instances - one per HTTP client as recommended in the WireMock documentationIt is originally forked from WireMock Spring Boot.
Add the dependency to wiremock-spring-boot
:
<dependency>
<groupId>org.wiremock.integrations</groupId>
<artifactId>wiremock-spring-boot</artifactId>
<version>X</version>
<scope>test</scope>
</dependency>
testImplementation "org.wiremock.integrations:wiremock-spring-boot:X"
Enable it with the @EnableWireMock
annotation, like:
@SpringBootTest
@EnableWireMock
class DefaultPropertiesTest {
@Value("${wiremock.server.baseUrl}")
private String wiremockUrl;
@Value("${wiremock.server.port}")
private String wiremockPort;
@BeforeEach
public void before() {
WireMock.stubFor(get("/the_default_prop_mock").willReturn(aResponse().withStatus(202)));
}
@Test
void test() {
RestAssured.baseURI = this.wiremockUrl;
RestAssured.when().get("/the_default_prop_mock").then().statusCode(202);
}
}
There are more running examples in the repo.
@EnableWireMock
adds test context customizer and enables WireMockSpringExtension
.@ConfigureWireMock
creates a WireMockServer
.@InjectWireMock
injects WireMockServer
instance to a test.By default these will be provided:
wiremock.server.baseUrl
- Base URL of WireMock server.wiremock.server.port
- HTTP port of WireMock server.These can be changed with:
@EnableWireMock(
@ConfigureWireMock(
baseUrlProperties = { "customUrl", "sameCustomUrl" },
portProperties = "customPort"))
class CustomPropertiesTest {
@Value("${customUrl}")
private String customUrl;
@Value("${sameCustomUrl}")
private String sameCustomUrl;
@Value("${customPort}")
private String customPort;
By default, each WireMockServer
is configured to load WireMock root from:
{specified-resource-name}/{server-name}
{specified-resource-name}
{CWD}/wiremock/{server-name}
{CWD}/stubs/{server-name}
{CWD}/mappings/{server-name}
{CWD}/wiremock
{CWD}/stubs
{CWD}/mappings
It can be changed:
@EnableWireMock({
@ConfigureWireMock(
name = "fs-client",
filesUnderClasspath = "some/classpath/resource",
filesUnderDirectory = "or/a/directory")
})
WireMock extensions can be registered independently with each @ConfigureWireMock
:
@EnableWireMock({
@ConfigureWireMock(extensions = { ... })
})