-
application.properties에서 실행 환경 별 port 다르게 설정하기카테고리 없음 2023. 1. 31. 22:22
WebSoekct으로 클라이언트의 메시지 발행 경로를 매핑하는 MessageController와 MessageBroker의 동작을 처리하는 Service Layer의 동작을 테스트하는 중 이슈가 발생
이들 테스트는 모두 @SpringBootTest로 진행하고 있었음
서버를 실행시키고 있는 상태에서 테스트를 진행할 때, 다른 모든 테스트들은 통과했지만 @SpringBootTest 테스트들만 실패
실제 Application을 구동시켜 테스트하는??? SpringBootTest를 고려해 application.properties에 spring.config.activate.on-profile=test로 분리해뒀던 테스트 환경을 활용하기 위해 해당 테스트들에 모두 @ActiveProfiles("test") 어노테이션을 추가
그 결과 SimpMessagingTemplate을 주입받아 동작하는 Service는 테스트를 통과했지만, MessageController의 테스트는 여전히 실패
이유를 찾아보기 위해 MessageControllerSocketTest의 코드를 살펴보는데 들어온 부분들...
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
@LocalServerPort private Integer port;
StompSession session = webSocketStompClient .connect( String.format("ws://localhost:%d/chatting", port), new StompSessionHandlerAdapter() { }) .get(timeout, TimeUnit.SECONDS);
서버 주소는 application.properties에 정의되어 있는 8000으로 사용하고 있었을 것인데, 서버가 이미 실행되고 있으니까 8000 port는 이미 사용되고 있을 것이고, @SpringBootTest에서는 test 실행 환경에 메모리를 올리기는 하겠지만 여전히 8000 port를 사용하려고 해서 connect.("ws:localhost:8000/chatting")에 연결하는 게 실패하는 것인가?
(좀 더 확실하게 하기 위해서는 실패하는 경우의 에러 메시지를 확인하고 webSocketStompClient.connect에 대해서도 알아보는 게 좋겠음)
그래서 application.properties의 test 실행 환경에 다른 port를 사용하도록 해보았음 (MessageControllerSocketTest의 @SpringBootTest가 DEFINED_PORT를 쓰게 했으므로)
#--- spring.config.activate.on-profile=test spring.datasource.url=jdbc:h2:mem:test server.port=8001
그 결과 테스트가 정상적으로 수행되는 것을 확인할 수 있었음