생성자에 @Autowired 적용
private final List<HandlerMethodArgumentResolver> methodArgumentResolvers = new ArrayList<>();
@Autowired
private UserHandlerMethodArgumentResolver userHandlerMethodArgumentResolver;
@Autowired
private GameRoomHandlerMethodArgumentResolver gameRoomHandlerMethodArgumentResolver;
public ParameterBinder() {
methodArgumentResolvers.add(new UserHandlerMethodArgumentResolver());
methodArgumentResolvers.add(new GameRoomHandlerMethodArgumentResolver());
}
기존에 위와 같은 코드가 있었습니다. @Autowired
를 통해 주입하는데 new로 객체 생성하면 빈 등록한게 의미가 없겠죠. 그래서 new로 만들지 않고 위의 주입된 것을 List안에 넣으두려고 했습니다. 그런데 List에 null값에 들어가더라구요. 왜 그런걸까요?
그 이유는 순서가 생성자가 먼저 호출되고 Autowired로 필드 변수에 주입되기 때문입니다. 그렇기 때문에 주입되기 전이라 null이 들어간 것이죠. 이런 경우 생성자를 @Autowired
하여 해결할 수 있습니다!
@Autowired
public ParameterBinder(UserHandlerMethodArgumentResolver userHandlerMethodArgumentResolver,
GameRoomHandlerMethodArgumentResolver gameRoomHandlerMethodArgumentResolver) {
methodArgumentResolvers.add(userHandlerMethodArgumentResolver);
methodArgumentResolvers.add(gameRoomHandlerMethodArgumentResolver);
}
이렇게 하면 생성자 매개변수에 값이 바로 주입되어 List에 들어갈 수 있습니다.
WebSocketSession에 대한 Mock 만들기
Mockito 프레임워크를 사용하여 다음과 같이 WebSocketSession에 대해서도 Mock을 만들 수 있네요.
private WebSocketSession webSocketSession = mock(WebSocketSession.class);
private User user = new User("brad903", "1234", "브래드");
@Before
public void setUp() throws Exception {
Map<String, Object> map = new HashMap<>();
map.put(HttpSessionUtils.USER_SESSION_KEY, user);
when(webSocketSession.getAttributes()).thenReturn(map);
}
mock으로 WebSocketSession
클래스를 만들어놓고 그 객체의 getAttributes() 메서드가 실행하는 시점에 리턴하게 하는 값을 매핑하는 것이죠. 처음엔 webSocketSession.getAttributes().get()
까지 했는데 get()
은 Map객체의 메서드라 미치지 않더라구요. 그래서 webSocketSession.getAttributes()
까지에 대한 값만 받도록 함으로써 테스트를 진행할 수 있었습니다.
다음은 Mock 테스트에 대한 중복을 제거하고 소켓 메세지 받을 때부터 Controller까지 매핑시켜주는 작업을 진행해야겠습니다.
'TIL' 카테고리의 다른 글
Today's Dev Notes(2019-03-17) (0) | 2019.03.17 |
---|---|
Todays' Dev Notes(2018-03-16) (0) | 2019.03.16 |
Todays' Dev Notes(2018-03-11) (0) | 2019.03.12 |
Today's Dev Notes(2019-03-10) (0) | 2019.03.11 |
Today's Dev Notes(2019-03-09) (0) | 2019.03.10 |