본문 바로가기
개발 관련/spring

WireMock 사용

by lazysnack 2022. 7. 14.

순서가 어긋난 감이 있긴 하지만, 지난 번 API 통신을 위해 Feign 을 사용했었는데,
테스트를 진행할 때 실제로 API 접속을 할 수는 없으니 Mock Web 서버를 만드는 기술인 WireMock 를 사용한 내용을 올리고자 한다.

WireMock 이란?

1. 의존성 추가

  • Maven 을 사용하므로 pom.xml 에 의존성 추가
<dependency>
    <groupId>com.github.tomakehurst</groupId>
    <artifactId>wiremock-jre8</artifactId>
    <version>2.24.1</version>
    <scope>test</scope>
</dependency>

2. 테스트 코드 작성

public class Test {

    @Rule
    public WireMockRule wireMockRule = new WireMockRule(8089); // 작성하지 않을 경우 default 8080    

    private BoardServiceService service;
    ...

    @Test
    public void 목록_test() {

        StubMapping accept = stubFor(
                get(urlPathMatching("/board/([a-zA-Z0-9/-]*)")) // board/71 같은 걸 찾기 위해 정규표현식 사용
                        .willReturn(aResponse()
                                .withStatus(200)
                                .withHeader("content-type", "application/json")
                                .withBody("Hello world!")
                        )
        );
        ApiResponse<Data> ret = service.getBoard(71); // 서비스에서 API 호출 (/board/71)
        assertEquals("200", ret.getCode());
        assertEquals("OK", ret.getMessage());
        ...
    }
}
  • Junit 을 지원하기에 좀 편하게 테스트할 수 있음. (5에서도 가능할 것 같긴한데...)
  • sample 은 간단하게 작성하였지만, 제공하는 기능들이 많다. (https, proxy, 상태저장 등)
  • 좀 더 자세한 내용은 WireMock 페이지에서 확인 가능

'개발 관련 > spring' 카테고리의 다른 글

HandlerMethodArgumentResolver 사용  (0) 2022.07.14
JPA 어노테이션  (0) 2022.07.14
JPA 락에 대해  (0) 2022.07.14
Mockito 정리 (1)  (0) 2022.07.14
SpringBoot Actuator  (0) 2022.07.14