Kotest WireMock 확장

WireMock 확장에 대해 소개한다.

WireMock은 URL, header 및 body content 패턴 등에서 일치하는 HTTP 응답 스터빙(stubbing)을 제공하는 라이브러리이다.

Kotest는 WireMock과의 통합을 위해 kotest-extensions-wiremock 모듈을 제공한다.

시작하려면 빌드에 다음 종속성을 추가해야 한다:

io.kotest.extensions:kotest-extensions-wiremock:{version}

클래스 경로에 이 종속성을 포함하면 WireMockListener가 사용할 수 있게 된다. WireMockListener는 테스트를 하는 동안에 WireMockServer의 수명 주기를 관리한다.

예를 들어:

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

위의 예제에서는 사양의 테스트를 실행하기 전에 WireMockListener를 시작하고 사양의 모든 테스트를 완료한 후 중지하는 WireMockServer의 인스턴스를 만들었다.

WireMockServer.perSpec(customerServiceServer)를 사용하여 동일한 결과를 얻을 수 있다.

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

위의 예제에서는 사양의 모든 테스트를 실행하기 전에 WireMockListener를 시작하고 사양의 모든 테스트를 완료한 후 중지하는 WireMockServer의 인스턴스를 만들었다. WireMockServer.perTest(customerServiceServer)를 사용하여 동일한 결과를 얻을 수 있다.


참조




최종 수정 : 2024-04-14