매우 간단한 Controller를 테스트 하겠습니다.
앞에서 만든 MultiActionController를 테스트 하는 코드를 작성하겠습니다. 앞에서 작서해준 컨트롤러는 다음과 같이 View이름만 넘겨 주도록 만든 Stub 형태 입니다.
public ModelAndView list(HttpServletRequest request, HttpServletResponse response){
return new ModelAndView(“issue/list”);
}
이 녀석을 EasyMock과 spring-mock.jar안에 있는 클래스들을 사용하여 테스트 클래스를 만들어서 IssueService로 부터 받아온 List<Issue>를 ModelAndView에 담아서 반환 하도록 구현할 것입니다.
1. 먼저 테스트 클래스를 작성하고 기본적으로 필요한 변수들을 설정합니다.
private IssueController issueController;
private IssueService mockIssueService;
private MockHttpServletRequest request;
private MockHttpServletResponse response;
@Before
public void setUp() {
issueController = new IssueController();
mockIssueService = createMock(IssueService.class);
issueController.setIssueService(mockIssueService);
request = new MockHttpServletRequest();
response = new MockHttpServletResponse();
}
2. 테스트를 작성합니다.
public void testList() {
List<Issue> issueList = new ArrayList<Issue>();
expect(mockIssueService.getAll()).andReturn(issueList);
replay(mockIssueService);
ModelAndView mav = issueController.list(request, response);
assertEquals(“issue/list”, mav.getViewName());
assertEquals(issueList, mav.getModel().get(“issueList”));
verify(mockIssueService);
}
위 테스트는 컨트롤러의 list 메소드에서 반환되는 ModelAndView의 viewName과 “issueList”라는 key로 List<Issue> 객체를 가지고 있는지 확인합니다. 이 때 필요한 IssueService의 행위를 ‘녹화-> 재생->검사’ 하는 작업을 거칩니다.
3. JUnit 테스트를 실행합니다.list 메소드를 제대로 구현해두지 않았기 때문에 에러가 발생합니다.
4. list 메소드 구현하기
return new ModelAndView(“issue/list”, “issueList”, issueService.getAll());
}
5. 다시 JUnit 테스트 실행