본문 바로가기

Dev.Testing/Junit

Spring MVC Controller 를 JUnit으로 Test 하기 with EasyMock

[출처] 머찐아빠 블로그


annotation을 이용한 jUnitTest를 하려면 이것저것 신경쓸게 많다. 
하지만 EasyMock을 사용하면 그 신경쓸꺼리를 많이 덜게 해준다.
특히 Controller 같은 경우 request, response등의 Mockup 객체가 있어야 하기에 더더욱 그렇다.

세팅방법은 간단하다. EasyMock의 클래스/메소드 사용법만 익히면 된다.

1. 관련 jar 파일을 임포트한다. 


처음 easymock-3.0.jar(현재 최신판)만 import 하니 관련 클래스가 없다는 다음의 메시지가 뜬다. 

 java.lang.NoClassDefFoundError: org/objenesis/ObjenesisHelper
--- 이하 생략 ----


그래서 찾아보니 jar 파일이 하나 더 필요하단다.

이 jar를 추가하니 에러가 없어졌다.

2. Test하려는 Controller class 옆에 ~ControllerTest라는 아무이름으로 클래스 하나 생성한다.
3. @Before, @Test 어노테이션을 붙인 메소드를 만든다.

public class RequestMappingTest {   
  
    private MockHttpServletRequest request;   
    private MockHttpServletResponse response;   
    private MyController controller;   
    private AnnotationMethodHandlerAdapter adapter;   
  
    @Before  
    public void setUp() {   
  
        controller = EasyMock.createNiceMock(MyController.class);   
  
        adapter = new AnnotationMethodHandlerAdapter();   
        request = new MockHttpServletRequest();   
        response = new MockHttpServletResponse();   
    }   
  
    @Test  
    public void testname() throws Exception {   
  
        request.setRequestURI("/users");   
  
        controller.foo(response);   
        EasyMock.expectLastCall().once();   
        EasyMock.replay(controller);   
  
        adapter.handle(request, response,   controller);   
        EasyMock.verify(controller);   
    }   
 
 소스출처 : http://www.olivergierke.de/wordpress/2009/05/unit-testing-annotation-based-spring-mvc-controllers/


4. EasyMock 클래스의 메소드가 각각 어떻게 사용되는지만 익히면 된다.


EasyMock 사용법 참조 : http://www.egovframe.go.kr/wiki/doku.php?id=egovframework:dev:tst:mock_support#mock_라이브러리_사용