Skip to main content
Version: 6.0 🚧

WireMock

WireMock​

WireMock is a library which provides HTTP response stubbing, matchable on URL, header and body content patterns etc.

Kotest provides a module kotest-extensions-wiremock for integration with wiremock.

To begin, add the following dependency to your build:

io.kotest:kotest-extensions-wiremock:${kotestVersion}
note

Since Kotest 6.0, all extensions are published under the io.kotest group once again, with version cadence tied to main Kotest releases.

Having this dependency in the classpath brings WireMockListener into scope. WireMockListener manages the lifecycle of a WireMockServer during your test.

For example:


class SomeTest : FunSpec({
val customerServiceServer = WireMockServer(9000)
listener(WireMockListener(customerServiceServer, ListenerMode.PER_SPEC))

test("let me get customer information") {
customerServiceServer.stubFor(
WireMock.get(WireMock.urlEqualTo("/customers/123"))
.willReturn(WireMock.ok())
)

val connection = URL("http://localhost:9000/customers/123").openConnection() as HttpURLConnection
connection.responseCode shouldBe 200
}

// ------------OTHER TEST BELOW ----------------
})

In above example we created an instance of WireMockListener which starts a WireMockServer before running the tests in the spec and stops it after completing all the tests in the spec.

You can use WireMockServer.perSpec(customerServiceServer) to achieve same result.


class SomeTest : FunSpec({
val customerServiceServer = WireMockServer(9000)
listener(WireMockListener(customerServiceServer, ListenerMode.PER_TEST))

test("let me get customer information") {
customerServiceServer.stubFor(
WireMock.get(WireMock.urlEqualTo("/customers/123"))
.willReturn(WireMock.ok())
)

val connection = URL("http://localhost:9000/customers/123").openConnection() as HttpURLConnection
connection.responseCode shouldBe 200
}

// ------------OTHER TEST BELOW ----------------
})

In above example we created an instance of WireMockListener which starts a WireMockServer before running every test in the spec and stops it after completing every test in the spec. You can use WireMockServer.perTest(customerServiceServer) to achieve same result.