더북(TheBook)

4.2 웹 애플리케이션 테스트하기

 

스프링 MVC의 장점 중 하나는 애너테이션으로 웹 요청을 처리할 방법을 선언하는 POJO 기반 프로그래밍 모델을 이용한다는 것이다. 이런 프로그래밍 모델은 단순할 뿐만 아니라 컨트롤러를 애플리케이션의 다른 컴포넌트처럼 취급할 수 있게 한다. 아마도 POJO를 이용한 컨트롤러 테스트 코드를 작성하는 것에 매력을 느낄지도 모른다.

예를 들어 2장에서 작성한 ReadingListControlleraddToReadingList() 메서드를 생각해 보자.


@RequestMapping(method=RequestMethod.POST)
public String addToReadingList(Book book) {
    book.setReader(reader);
    readingListRepository.save(book);
    return "redirect:/";
}

@RequestMapping 애너테이션을 무시하고 보면 이 메서드는 일반적인 자바 메서드다. ReadingListRepository의 목(mock) 구현체를 제공한 후 addToReadingList() 메서드를 직접 호출하여 반환 값을 검증하고 리포지토리의 save() 메서드 호출을 확인하는 테스트는 만들기가 그리 어렵지 않다.

하지만 이 테스트의 문제는 메서드 자체만 테스트한다는 것이다. 테스트를 아예 안 하는 것보다는 낫지만, /로 들어오는 POST 요청을 처리하는 부분은 테스트할 수 없다. 폼 필드들을 Book 매개변수에 제대로 연결했는지도 테스트할 수 없다. 게다가 메서드가 반환한 String이 특정 값을 포함하는지 검증할 수는 있어도 메서드 처리를 완료한 후 요청을 /로 리다이렉트했는지 명확히 테스트할 수는 없다.

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