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}
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.