WebTestClient 활용해 Spring Boot 테스트하기 - kotlin

2017-12-23 14:45

Spring5에 새롭게 추가된 기능 중 유용한 기능 중의 하나가 WebClient이다. 이 WebClient를 활용하면 API에 대한 요청과 응답을 non blocking으로 처리할 수 있다. 기존의 RestTemplate을 대체할 것으로 생각된다.

RestTemplate의 경우 테스트를 위해 TestRestTemplate이 존재했다. 이와 똑같이 WebClient에도 테스트를 위한 WebTestClient를 제공하고 있다. WebTestClient를 활용해 "Hello World"를 응답하는 API에 대한 테스트를 다음과 같이 구현할 수 있다. kotlin으로 구현한 코드를 살펴보면 다음과 같다.

import org.assertj.core.api.Assertions
import org.junit.Test
import org.junit.runner.RunWith
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.test.context.SpringBootTest
import org.springframework.http.MediaType
import org.springframework.test.context.junit4.SpringRunner
import org.springframework.test.web.reactive.server.WebTestClient
 
@RunWith(SpringRunner::class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class HelloWorldControllerTest {
    @Autowired
    lateinit var client : WebTestClient
 
    @Test
    fun helloWorld() {
        client.get().uri("/helloworld")
                .accept(MediaType.APPLICATION_JSON_UTF8)
                .exchange()
                .expectStatus().isOk
                .expectBody()
                .consumeWith {
                    Assertions.assertThat(String(it.responseBody)).isEqualTo("Hello World")
                }
    }
}

기존의 SpringBoot Test와 별반 다를 것은 없다. 똑같은 방법으로 WebTestClient를 @Autowired한 후에 사용하면 된다.

위 코드를 보면 WebClient는 fluent functional style로 구현하도록 API를 지원하고 있다. 잘 사용하면 나름 유용하게 사용할 수 있겠다.

0개의 의견 from SLiPP

의견 추가하기

연관태그

← 목록으로