2011-10-20 2 views
4

junit을 사용하여 응용 프로그램을 테스트하려고합니다. 내 디스패처 서블릿 내 컨트롤러의 어떤 요청을 보낼 수없는 것 같다,Spring 3.0 junit 테스트 DispatcherServlet

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = "/META-INF/spring/applicationContext-test.xml") 
@TransactionConfiguration 
@Transactional 
public class DispatcherServletTest extends AbstractJUnit4SpringContextTests { 

    private MockHttpServletRequest request; 
    private MockHttpServletResponse response; 

    private DispatcherServlet dispatcher; 

    @Before 
    public void setUp() throws Exception { 
      request = new MockHttpServletRequest(); 
      response = new MockHttpServletResponse(); 

      MockServletConfig config = new MockServletConfig("myapp"); 
      config.addInitParameter("contextConfigLocation","classpath*:webmvc-config.xml"); 

      dispatcher = new DispatcherServlet(); 
      dispatcher.init(config); 
    } 
    //test cases 

}

그래서 문제가 :

그러므로 나는 설정을 다음 클래스를했습니다.

컨텍스트에 contextConfigurationLocation이 있다고 생각합니다. 그가 파일을 (그렇지 않으면 예외를 슬로우) 찾을 수처럼 보이지만 모든 구성을로드하지 않습니다

로거는 말한다 :

org.springframework.web.servlet.PageNotFound -에 매핑을 찾을 수 없음 URI와 HTTP 요청에 대한 [통해 http : // localhost : 8080/MyApp를/ABC]

하지만 무엇이 잘못되었는지 전혀 생각이 없다 ...

내가 어떤 도움을 주셔서 감사합니다 것입니다!

미리 감사드립니다.

+1

정말로 디스패처 서블릿을 테스트하고 싶습니까? 웹 컨트롤러 처리기 메서드 만 "테스트"하지 않으시겠습니까? – Ralph

+0

junit을 사용하여 http 요청을 테스트 할 수 없다고 생각합니다. 오직 서비스. – jaleel

+0

아니요 올바른 컨트롤러 메서드가 호출되면 전체 응용 프로그램의 의미를 실제로 테스트합니다. 예 : 일부 데이터가 포함 된/myposturl에 POST를 보내 백엔드에 보내고이 호출을 담당하는 메소드가있는 올바른 컨트롤러가 "응답 중"인지 확인하려고합니다. 그래서 내가 생각한 것은 컨트롤러가 아닌 디스패처 서블릿에 요청하십시오. 내 컨트롤러에서 방금이 요청을 처리하는 메서드가 있습니다. RequestMapping (메서드 = RequestMethod.POST, headers = "Accept = ...") public ResponseEntity createFromJsonArray (@RequestBody String json) {... – Alexander

답변

1

광산이 잘 작동하고 있으므로 다음 조정을 시도하십시오.

  1. 당신이 Junit4 당신이 클래스를 테스트 확장 할 필요를 사용하지 않고있는 경우의 JUnit 주자 트릭
  2. 로드 클래스 경로를 통해 상황에 맞는 설정을해야하고, 확인 테스트 클래스 경로에서 액세스 할 수 있도록

    @ContextConfiguration (locations = { "classpath : applicationContext-test.xml"})

  3. 그러면 주석이 달린 컨트롤러를 테스트하기 만하면됩니다. 나는 이런 식으로 할 : 처음에는

    ,이 때문에 AbstractJUnit4SpringContextTests을 연장하고 @RunWith (...)를 사용할 수 없습니다 :

 

    @Test 
    @Transactional 
    public void testAnnotatedListUser() throws Exception { 
     MockHttpServletRequest request = new MockHttpServletRequest(); 
     MockHttpServletResponse response = new MockHttpServletResponse(); 
     AnnotationMethodHandlerAdapter handlerAdpt = new AnnotationMethodHandlerAdapter(); 
     request.setRequestURI("/you/URIhere"); 
     ModelAndView mav = handlerAdpt.handle(request, response, this.controller); 
     assertEquals("Incorrect view name returned", "myexpectedviewname", mav.getViewName()); 
    } 

0

내 질문에 몇 가지 문제가 있습니다 그것은 동일합니다. 두 번째에서

, 당신은 당신이 application.xml에있는 핸들러를 정의하고 @Autowire 개인 핸들러 핸들러를 통해 테스트 케이스에 autowiring에 의해 dispatcherServlert하지만 처리기를 사용하지 말아야 ...

이 그런 다음 모든 작업을해야

벌금!

관련 문제