@Test publicvoidhello()throws Exception { // 요청 "/hello" // 응답 모델 name : junjang // 응답 뷰 이름 : hello mockMvc.perform(get("/hello")) .andExpect(status().isOk()) .andDo(print()) .andExpect(view().name("hello")) .andExpect(model().attribute("name", is("junjang"))); } }
먼저 단순하게 응답시 Model과 View 이름을 확인하기 위한 코드입니다. 테스트를 실행시 404에러가 뜰텐데 이는 Controller에 명시한 경로가 없기 때문입니다. Controller를 구현하러 이동합니다.
Controller 클래스
1 2 3 4 5 6 7 8 9
@Controller publicclassSampleController{
@GetMapping("/hello") public String hello(Model model){ model.addAttribute("name", "junjang"); return"hello"; } }
@Controller를 통해 View에 Model로 junjang이란 name의 데이터를 hello라는 뷰 이름으로 보냅니다. 테스트를 실행하면 템플릿인 hello가 없다는 오류가 출력됩니다. 아직 우리는 hello.html을 만들지 않았기 때문에 이제 만들러 가봅시다.
@Test publicvoidhello()throws Exception { // 요청 : "/hello" // 응답 모델 name : junjang // 응답 뷰 이름 : hello
mockMvc.perform (get ("/hello")) // 상태 테스트 .andExpect(status().isOk()) // 상태 출력하기 .andDo(print()) // 뷰 이름이 일치하는지 테스트 .andExpect(view().name("hello")) // 값이 보내졌는지 테스트 .andExpect(model().attribute("name", is("junjang"))) // junjang이 view에 포함되어 있는지 테스트 .andExpect(content().string(containsString("junjang"))); }
이번엔 junjang이란 값이 Model을 통해 넘어왔는데 그 문자열 값이 포함되어 있는지 테스트 코드를 작성 후 실행합니다. 그랬더니 값이 포함이 되어 있지 않다는 에러가 뜹니다. 이제 값을 포함 시키러 가보겠습니다.