[java] TestContainers로 웹애플리케이션 테스트하기

웹 애플리케이션을 개발할 때 테스트는 매우 중요한 부분입니다. 테스트를 통해 개발한 기능을 확인하고 버그를 발견하여 수정하는 것은 효과적인 개발을 위해 필수적입니다. 그런데 테스트를 작성할 때 종종 외부 리소스에 의존하는 경우가 있습니다. 특히, 데이터베이스나 메시지 큐와 같은 리소스에 접근하는 웹 애플리케이션을 개발한다면 외부 리소스의 존재에 따라 테스트의 일관성과 안정성에 영향을 줄 수 있습니다.

이러한 문제를 해결하기 위해 TestContainers를 사용할 수 있습니다. TestContainers는 도커를 이용하여 테스트 환경을 구축하는 도구입니다. 이를 활용하여 실제 데이터베이스와 같은 외부 의존 리소스를 테스트용 컨테이너로 대체하여 안정적으로 테스트를 수행할 수 있습니다.

TestContainers 설정

TestContainers를 사용하기 위해서는 아래의 의존성을 추가해야 합니다.

<dependency>
    <groupId>org.testcontainers</groupId>
    <artifactId>testcontainers</artifactId>
    <version>1.15.0</version>
    <scope>test</scope>
</dependency>

웹 애플리케이션 테스트하기

우선, 테스트용 데이터베이스 컨테이너를 생성하고 시작합니다. 아래의 코드는 PostgreSQL 데이터베이스를 사용하는 예제입니다.

import org.junit.jupiter.api.Test;
import org.testcontainers.containers.PostgreSQLContainer;

public class WebAppTest {

    @Test
    public void testWebApp() {
        try (PostgreSQLContainer<?> postgres = new PostgreSQLContainer<>("postgres:13.4")) {
            // 데이터베이스 컨테이너 시작
            postgres.start();

            // 웹 애플리케이션 실행

            // 테스트 수행

            // 데이터베이스 컨테이너 정리
            postgres.stop();
        }
    }
}

위의 예제 코드에서는 @Test 어노테이션을 사용하여 테스트 메서드를 정의하고, PostgreSQL 데이터베이스 컨테이너를 생성하여 시작합니다. 웹 애플리케이션을 실행한 후에 실제 테스트를 수행하고, 마지막으로 데이터베이스 컨테이너를 정리합니다. 이렇게 테스트 환경을 설정하면 외부 리소스에 대한 의존성 없이 테스트를 수행할 수 있습니다.

결론

TestContainers를 사용하면 외부 리소스에 의존하는 웹 애플리케이션의 테스트를 간편하게 수행할 수 있습니다. 실제 데이터베이스나 메시지 큐와 같은 리소스를 테스트용 컨테이너로 대체하여 안정성과 일관성 있는 테스트를 수행할 수 있습니다. 이는 웹 애플리케이션의 개발과 유지보수를 효과적으로 하기 위해 필요한 접근 방법입니다.

참고: TestContainers 공식 문서