@SpringBootTest
@AutoConfigureMockMvc .............(1)
class ReviewControllerTest {
@Autowired private MockMvc mockMvc;
@Autowired ReviewController reviewController;
@BeforeEach...........(2)
public void beforeEach(){
mockMvc = MockMvcBuilders.standaloneSetup(reviewController)..........(3)
.addFilter(new CharacterEncodingFilter("utf-8", true))........(4)
.alwaysExpect(MockMvcResultMatchers.status().isOk())
.build();
}
@Test
public void testGetReviewsByBorrowAndStatusOrderByThings() throws Exception{
mockMvc.perform(MockMvcRequestBuilders.get("/review/publish/3022/sort/page"))...........(5)
.andExpect(MockMvcResultMatchers.status().isOk()).........(6)
.andDo(MockMvcResultHandlers.print());
}
}
(1) 테스트에 사용할 가상의 WAS 필요로 하다. Mock이 가짜라는 의미를 가지고 있다.
(2) Test를 수행하기에 앞서 WAS를 생성해야 하므로 AOP를 활용한다.
(3) 가상 WAS에 컨트롤러 인스턴스를 주입하여 로딩한다.
(4) 필터를 utf-8로 적용한다.
(5) url을 입력한다. 여기서 반드시 contextPath/ 이후 부터 적어야 한다.
(6) andExpect로 assertThat을 대신한다. andDo로 필요한 데이타가 있으면 추출한다.
참고한 자료는 아래와 같다.
https://siyoon210.tistory.com/145
https://github.com/HomoEfficio/dev-tips/blob/master/Spring%20Test%20MockMvc%EC%9D%98%20%ED%95%9C%EA%B8%80%20%EA%B9%A8%EC%A7%90%20%EC%B2%98%EB%A6%AC.md
https://www.whiteship.me/springboot-no-more-runwith/
https://github.com/ytw9699/Dokky/issues/338