본문 바로가기
마이크로서비스

TestContainer의 docker-compose 활용했지만, 테스트가 통과하지 않았다면? - 활용

by simplify-len 2022. 4. 17.

이전 글 - TestContainer 를 통해 테스트 용이성 높이기 - 입문

 

TestContainer 를 통해 테스트 용이성 높이기 - 입문

TestContainer TestContainers 라는 라이브러리는 테스트 코드에서 손쉽게 원하는 모듈을 테스트용도로 띄우고 내릴 수 있습니다. // add in build.gradle testImplementation 'org.testcontainers:testcontainers..

happy-coding-day.tistory.com

 

실제로 TestContainer 를 사용하다보면 예기치 않게 동작되는 경우가 있습니다.

 

docker-compose 를 통해 잘되는 것을 확인하고 난 뒤, 이를 TestContainer 를 활용해 컨테이너를 띄울 경우 이슈가 발생합니다. 왜냐하면 우리의 Docker-compose 는 비동기로 동작되기 때문입니다.

 

수동으로 docker-compose 를 사용해 테스트하는 경우의 동작 순서는 아래와 같습니다.

수동 docker-compose up 할 경우 순서도

 

이를 그대로 TestContainers 를 활용해 docker-compose 를 up 하게되면 아래와 같은 순서로 동작됩니다.

 

TestContainers 를 활용해 docker-compose up 할 경우 순서도

이렇게 동작되다보니, Run TestCode 가 동작될 때, 아직 docker images가 준비되지 않아, 테스트가 실패하게 됩니다.

 

이런 경우를 위해 TestContainers 는 docker-compose 가 Ready 가 될 때까지 기다릴수 있는 설정을 제공합니다.

 

코드로서 표현하면 다음과 같습니다.

@ClassRule
public static DockerComposeContainer container =
        new DockerComposeContainer(new File("docker-compose.yml"))
                .waitingFor("mockServer_1", Wait.forHttp("/"))
                .waitingFor("config-server_1", Wait.forHttp("/config/mock-application.yml"));

 

.waitingFor 라는 메소드를 통해 각각의 images 가 준비완료 상태일 때까지 TestCode 를 실행시키지 않습니다.

 

이렇게 함으로써 docker-compose 를 TestContainers 에서도 올바르게 사용할 수 있게 됩니다.

댓글