잊지 않겠습니다.

Filter가 적용이 되어 있는 경우, Filter에 적용되는 bean의 설정을 위해서 XmlWebApplicaionContext를 이용해서 Context객체들을 따로 로딩해줘야지 된다. 


순서는 다음과 같다. 


  1. ServletContext의 생성
  2. XmlWebApplicationContext의 생성 : 이때, Filter에 사용되는 Bean의 설정들은 모두 /WEB-INF/web.xml에 위치하고 있어야지 된다.
  3. XmlWebApplicationContext에 SevletContext를 주입하고, refresh를 시켜준다.
  4. 마지막으로, ServletContext에 속성을 추가한 후, MockFilterConfig, MockFilterChain을 이용해서 각각 Filter가 적용되는 Controller들을 테스트 한다.


    @Test

    public void get() throws Exception {

    ServletContext sc = new MockServletContext();

    XmlWebApplicationContext wctx = new XmlWebApplicationContext();    

    wctx.setServletContext(sc);            

        wctx.refresh();

        sc.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, wctx);

        assertTrue(wctx.containsBean("sessionFactory"));

        

        

    MockHttpServletRequest request = new MockHttpServletRequest("GET","/rest/person/get/" + person.getId().toString());

    MockHttpServletResponse response = new MockHttpServletResponse();

        MockFilterConfig filterConfig = new MockFilterConfig(sc);

        MockFilterChain filterChain = new MockFilterChain();

        

        OpenSessionInViewFilter filter = new OpenSessionInViewFilter();

        filter.init(filterConfig);

        filter.doFilter(request, response, filterChain);

        

        

    Object handler = handlerMapping.getHandler(request).getHandler();

    ModelAndView modelAndView = handlerAdapter.handle(request, response, handler);    

    System.out.println(response.getContentAsString());    

    assertNull(modelAndView);

    }



Posted by Y2K
,