[java] TestContainers로 손쉽게 API 테스트 작성하기

API 테스트 작성은 개발자들에게 중요한 작업 중 하나입니다. 이를 통해 우리는 코드의 동작을 검증하고 안정성을 확보할 수 있습니다. 이번에는 TestContainers를 사용하여 API 테스트를 보다 쉽게 작성하는 방법에 대해 알아보겠습니다.

TestContainers란?

TestContainers는 Java로 작성된 인프라 테스트 라이브러리입니다. Docker 컨테이너를 사용하여 테스트를 실행하므로 테스트 환경을 구성하는 데 더 이상 많은 시간을 낭비하지 않아도 됩니다. 특히 DB, 메시지 큐, 웹 서버 등의 인프라 구성 요소를 테스트할 때 유용합니다.

API 테스트를 위한 TestContainers 사용하기

다음은 TestContainers를 사용하여 API 테스트를 작성하는 예시입니다.

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.testcontainers.containers.GenericContainer;
import org.testcontainers.shaded.com.fasterxml.jackson.databind.ObjectMapper;
import org.testcontainers.shaded.org.apache.http.HttpResponse;
import org.testcontainers.shaded.org.apache.http.client.methods.HttpGet;
import org.testcontainers.shaded.org.apache.http.impl.client.HttpClientBuilder;

public class ApiTest {

    private static final int PORT = 8080;
    private static final String BASE_URL = "http://localhost:" + PORT;

    private GenericContainer<?> container;

    @BeforeEach
    public void setup() {
        container = new GenericContainer<>("your-api-image:latest")
                .withExposedPorts(PORT);
        container.start();
    }

    @Test
    public void testApiCall() throws Exception {
        String apiUrl = BASE_URL + "/api/endpoint";
        HttpGet request = new HttpGet(apiUrl);

        HttpResponse response = HttpClientBuilder.create().build().execute(request);
        int statusCode = response.getStatusLine().getStatusCode();

        // 테스트 결과 검증
        assert statusCode == 200;
    }
}

위 예시에서는 TestContainers의 GenericContainer를 사용하여 API 컨테이너를 실행하고, 테스트를 위해 API 엔드포인트를 호출합니다. 호출한 결과의 상태 코드를 검증하여 테스트가 성공적으로 실행되는지 확인할 수 있습니다.

결론

TestContainers는 Java로 작성된 인프라 테스트 라이브러리로, 개발자들이 API 테스트를 보다 쉽고 효율적으로 작성할 수 있도록 도와줍니다. Docker 컨테이너를 사용하여 테스트 환경을 구성하므로 테스트 작성에 드는 시간과 노력을 크게 줄일 수 있습니다. API 테스트에 TestContainers를 사용하여 코드의 동작을 검증하고 안정성을 확보해보세요!

참고 자료