2010-02-23 3 views
2

봄에 사용되는 바인더/속성 편집기를 테스트하기 위해 나는이 모델과 바인딩 결과 내가 바인딩 결과를 테스트하려면 어떻게어떻게 2.5 컨트롤러

@RequestMapping(method = RequestMethod.POST) 
    public ModelAndView submit(@ModelAttribute(“user”) User user, BindingResult bindingResult) { 
    //do something 
} 

을 예상하는 방법 주석 컨트롤러? 사용자와 바인딩 결과로 메서드를 호출하면 바인딩 프로세스를 테스트하지 않습니다. 거기에 MockHttpServletRequest를 사용하고 모델과 바인딩 결과, 제안 사항을 반환하는 무언가가있을 것이라고 생각합니다.

답변

4

바인딩 (이 메소드가 호출되기 전에 발생 함)을 테스트하거나 "제출"핸들러 메소드를 테스트하려고합니까?

당신은 이런 식으로 바인딩을 테스트 할 수 있습니다

@Test 
    public void testHandlerMethod() { 

     final MockHttpServletRequest request = new MockHttpServletRequest("post", "/..."); 
     request.setParameter("firstName", "Joe"); 
     request.setParameter("lastName", "Smith"); 

     final User user = new User(); 
     final WebDataBinder binder = new WebDataBinder(user, "user"); 
     binder.bind(new MutablePropertyValues(request.getParameterMap())); 

     final ModelAndView mv = controllerTestInstance.submit(user, binder.getBindingResult()); 

     // Asserts... 

    }
+0

그건 내가 뭘 찾고 있었는지, 고마워! 내 컨트롤러에서는 registerCustomEditor 설정을 한 무리로 처리합니다. 컨트롤러와 테스트에서 모두 사용할 수있는 클래스를 사용해야한다고 생각하십니까? – albemuth

+0

사용자 정의 편집기를 initBinder 메소드에 등록하는 경우, 테스트에서 핸들러 메소드를 호출하기 전에이를 호출 할 수 있습니다. –

+0

정말 고마워. –

3

당신은 아마 당신이 달성하려고하는 것과 매우 관련된 spring-test-mvc 프로젝트를 찾을 수 있습니다. 이 프로젝트는 현재 사용할 수 있으며 전반적으로 상당히 간단하지만 진행되는 과정에서 약간의 변화가있을 것입니다. 따라서 안정적인 API가 필요한 경우 이는 아직 사용자에게 적합하지 않습니다.