-
WebSocket 동작 테스트하기Today I Learned 2023. 1. 26. 15:43
전체 플로우
- https://rieckpil.de/write-integration-tests-for-your-spring-websocket-endpoints/
messageConverter
awaitility
- https://github.com/awaitility/awaitility/wiki/Getting_started
트러블슈팅
- Connect, Subscribe 여부 확인: https://velog.io/@gkdud583/StompSession-메시지-전달-안되는-문제
>> WebSocketEventListener륾 정의해서 문제 확인
Connect, Subscribe는 문제 없음
Send를 잘 하고 있는지 확인
일단 BlockingQueue에 send한 DTO는 들어오지 않고 있었음
StompFrameHandler의 handleFrame이 실행되고 있는지 확인헀는데 실행되지 않고 있었음
handleFrame 동작과 관련이 있는??? DefaultStompSession.java의 handleMessage를 디버깅 시도, handleException이 실행되고 있었음
@MessageMapping 주소에 Mapping된 메서드가 실행은 되고 있었음, 그러면 convertAndSend가 동작하는 것을 검증하는 방식으로 테스트 방식을 선회할 수 있을까?
그 래 서
SimpMessagingTemplate을 @SpyBean으로 의존성을 주입하고
Service에서 돌아오는 값을 Mocking하고
모의 세션이 서버에 메시지를 발행했을 때, SimpMessagingTemplate이 자신을 구독하고 있는 주소에 발행을 정상적으로 수행하는지 테스트
성공
Service로 simpMessagingTemplate을 옮김
simpMessagingTemplate을 @Autowired하지 않고 Service의 생성자에 의존성을 직접 주입
Service의 Test는 @SpringBootTest, simpMessagingTemplate은 @SpyBean, Service의 생성자에 SpyBean하고 있는 simpMessagingTemplate을 넘겨 줄 때에야 simpMessagingTemplate가 동작을 수행하는 것을 verify할 수 있었음
simpMessagingTemplate은 WebSocketConfig에서 @EnableWebSocketMessageBroker 어노테이션을 통해 주입된다고 하는데 맞나?
'Today I Learned' 카테고리의 다른 글
Java에서 Stream Collection을 다른 Collection으로 변환하기 (0) 2023.01.28 TCP 통신과 UDP 통신의 차이점 (0) 2023.01.27 Heap, PriorityQueue (0) 2023.01.26 git cherry-pick 명령어로 다른 브랜치의 커밋 내역 가져오기 (0) 2023.01.23 WebSocket을 이용한 실시간 채팅 구현하기 3-1: 브라우저 화면을 닫을 때 퇴장 메시지 전송하기 (0) 2023.01.21