더북(TheBook)

정적 임포트를 선언했으니 테스트 메서드를 다음과 같이 재작성할 수 있다.


...
    @Test
    public void homePage() throws Exception {
        mockMvc.perform( get("/"))
            .andExpect( status().isOk())
            .andExpect( view().name("readingList"))
            .andExpect( model().attributeExists("books"))
            .andExpect( model().attribute("books", is(empty())));
    }
...

테스트 메서드가 더 간결해졌다. 이 메서드는 가장 먼저 /에서 GET 요청을 수행한다. 다음으로 요청이 성공(isOk() 메서드는 HTTP 200 응답 코드를 검증한다)하고 응답 뷰의 논리적 이름이 "readingList"이기를 기대한다. 또 모델에 books 속성을 포함하고, 이 속성은 빈 컬렉션임을 검증한다. 이 모든 과정이 매우 직관적이다.

여기서 눈여겨볼 부분은 애플리케이션을 웹 서버에 배포하지 않았다는 점이다. 그 대신 모킹된 스프링 MVC에서 실행하고 MockMvc 인스턴스로 HTTP 요청을 보내도록 했다.

멋지지 않은가?

테스트 메서드를 하나 더 만들어 보자. 이번에는 새 책을 등록하려고 HTTP POST 요청을 전송하는 조금 더 흥미로운 메서드를 만들 것이다. POST 요청을 처리한 후 /로 리다이렉트하고, 모델의 books 속성은 새로 추가된 책 정보를 포함해야 한다. 코드 4-2는 스프링의 Mock MVC로 이런 테스트를 수행하는 방법을 보여 준다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.