반응형
질문 상세 페이지를 테스트할 때,
컨트롤러에서는 질문의 내용을 모델에 담아 전달해 템플릿 엔진을 통해 출력했다.
테스트 코드에서 모델에 담아 전달할 방법이 어떻게 되는지 찾아봤는데,
Model을 선언하고 넘길 수 있는 코드는 보이지 않았다.
생성된 객체를 전달하기
질문을 생성하고 질문의 상세 페이지를 접근하는 테스트코드를 작성할 때,
먼저, get을 통해 URI를 설정하고 접근할 것이다.
이 때, 생성된 질문을 전달해주기 위해서 flashAttr() 메서드를 사용한다.
flashAttr() 메서드에 객체 이름과 생성된 객체를 전달해준다.
mockMvc.perform(MockMvcRequestBuilders
.get(String.format("/questions/%d", newQuestion.getId()))
.flashAttr("newQuestion", newQuestion)
.session(session))
andExpect 작성하기
먼저 위 코드의 테스트의 결과 status를 확인한다.
그리고, 모델에 컨트롤러에서 작성한 것과 동일한 이름의 속성이 있는지 확인한다.
그리고 적절한 뷰로 전달되었는지 확인한다.
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.model().attributeExists("question"))
.andExpect(MockMvcResultMatchers.view().name("qna/detail"))
정리하기
테스트 코드에서 model.addAttribute() 와 같은 메서드를 사용하진 않았다.
생성된 객체를 perform 메서드 안에서 flashAttr() 메서드를 통해 전달했다.
그리고 이에 대해 상태코드, 모델 확인, 뷰 확인을 통해 적절한지 확인했다.
앞으로 컨트롤러에 대한 테스트 코드를 작성할 때,
1. perform() 메서드 작성
2. andExpect() 에는 상태코드, 모델, 뷰에 대한 테스트 코드를 작성한다.
'Java > Spring' 카테고리의 다른 글
[Spring] Test 코드에서 session 전달하기 (0) | 2021.07.12 |
---|---|
[Java Spring] HTTP PUT, DELETE 사용 (0) | 2021.06.25 |
[Java Spring] Controller 구현 후 404 Error (0) | 2021.06.21 |
[Spring-boot] H2 데이터베이스 연결하기 (0) | 2021.06.01 |
[Java Spring] 프로젝트 생성 후 테스트 코드 (0) | 2021.05.30 |