더북(TheBook)

코드 4-2의 테스트는 더 복잡하다. 사실 테스트 두 개를 메서드 하나로 작성했다. 첫 번째 부분은 책을 등록하고 요청 결과를 검증한다. 두 번째 부분은 메인 페이지에 새로운 GET 요청을 실행하여 새로 생성된 책이 모델에 있는지 검증한다.

책 정보를 등록할 때는 웹 브라우저가 애플리케이션에 전송할 때 사용하는 application/x-www-form-urlencoded(MediaType.APPLICATION_FORM_URLENCODED)로 콘텐트 타입을 설정해야 한다. 다음으로 MockMvcRequestBuildersparam() 메서드로 전송할 폼을 시뮬레이션하는 필드들을 설정한다. 요청을 실행하면 응답이 /로 리다이렉트되는지 검증한다.

첫 번째 테스트 메서드가 성공했다면 두 번째 부분으로 넘어간다. 먼저 응답으로 기대하는 값을 담은 Book 객체를 생성한다. 이 객체는 메인 페이지를 요청한 후 반환되는 모델 값과 비교하는 데 사용한다.

이제 /에 GET 요청을 수행한다. 모델에는 빈 컬렉션 대신 객체 하나를 담은 컬렉션이 있고, 그 객체가 방금 생성한 Book 객체와 동일한지 확인하는 과정을 제외하면 대부분은 앞에서 메인 페이지를 테스트한 방식과 다르지 않다. 두 객체가 같으면 컨트롤러는 POST 요청으로 책을 저장하는 작업을 수행한다고 볼 수 있다.

지금까지는 2장에서 작성한 버전처럼 보안이 없는 애플리케이션을 테스트한다고 가정하고 진행했다. 그런데 3장에서 작성한 버전처럼 보안을 적용한 애플리케이션을 테스트하고 싶다면 어떻게 해야 할까?

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