[java] TestContainers를 사용하여 웹소켓 테스트하기

웹소켓은 실시간 통신을 위한 프로토콜이며, 다양한 애플리케이션에서 사용됩니다. 웹소켓을 테스트하기 위해서는 실제 서버를 구동해야 하지만, TestContainers를 사용하면 테스트 환경에서도 웹소켓을 쉽게 테스트할 수 있습니다.

TestContainers 소개

TestContainers는 Docker 컨테이너를 사용하여 테스트 환경을 구축할 수 있는 자바 라이브러리입니다. 매우 간편하게 도커 컨테이너를 생성하고 관리할 수 있으며, 테스트에서 필요한 외부 리소스를 쉽게 사용할 수 있습니다.

웹소켓 테스트하기

아래는 TestContainers를 사용하여 웹소켓을 테스트하는 예제 코드입니다.

  1. DockerComposeContainer를 사용하여 도커 컨테이너를 생성합니다.
@Testcontainers
class WebSocketTest {

   private static final String DOCKER_COMPOSE_FILE = "docker-compose.yaml";
   
   @Container
   private static final DockerComposeContainer<?> CONTAINER = new DockerComposeContainer<>(new File(DOCKER_COMPOSE_FILE));
   
   @BeforeAll
   static void setup() {
       // 컨테이너 시작
       CONTAINER.start();
       
       // 웹소켓 연결 설정
       String url = "ws://" + CONTAINER.getServiceHost("websocket-server", 8080) + ":" +
               CONTAINER.getServicePort("websocket-server", 8080) + "/websocket";
       WebSocketClient.connect(url);
   }

   @Test
   void testWebSocket() {
       // 웹소켓에 대한 테스트 로직 작성
   }

   @AfterAll
   static void cleanup() {
       // 컨테이너 종료
       CONTAINER.stop();
   }
}
  1. @Testcontainers 어노테이션을 사용하여 TestContainers를 활성화합니다.
  2. @Container 어노테이션을 사용하여 DockerComposeContainer를 생성하고, docker-compose.yaml 파일을 전달합니다.
  3. @BeforeAll 어노테이션을 사용하여 테스트 시작 전 동작을 정의합니다. CONTAINER.start()를 호출하여 컨테이너를 시작하고, CONTAINER.getServiceHost()CONTAINER.getServicePort()를 사용하여 웹소켓 서버의 호스트 및 포트를 가져옵니다.
  4. @Test 어노테이션을 사용하여 테스트 케이스를 작성합니다.
  5. @AfterAll 어노테이션을 사용하여 테스트 종료 후 컨테이너를 종료합니다. CONTAINER.stop()를 호출하여 컨테이너를 정리합니다.

위의 예제는 TestContainers를 사용하여 웹소켓 테스트를 구현하는 방법을 보여줍니다. 테스트 환경을 간편하게 세팅할 수 있으며, 별도의 웹소켓 서버를 구동하지 않고도 테스트를 수행할 수 있습니다.

참고 자료