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
의견을 남기기 위해서는 SLiPP 계정이 필요합니다.
안심하세요! 회원가입/로그인 후에도 작성하시던 내용은 안전하게 보존됩니다.
SLiPP 계정으로 로그인하세요.
또는, SNS 계정으로 로그인하세요.