Whiteship's Note

Testing Controller

Spring MVC/10장 Testing : 2007. 6. 19. 13:58


매우 간단한 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. 먼저 테스트 클래스를 작성하고 기본적으로 필요한 변수들을 설정합니다.
public class IssueControllerTest {

    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. 테스트를 작성합니다.
    @Test
    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 메소드 구현하기
    public ModelAndView list(HttpServletRequest request, HttpServletResponse response){
        return new ModelAndView("issue/list", "issueList", issueService.getAll());
    }

5. 다시 JUnit 테스트 실행
사용자 삽입 이미지



top

Write a comment.




: 1 : 2 : 3 : 4 : 5 : 6 : 7 :