2011-10-07 4 views
2

Spring MVC 3.0에서 특정 메소드가 호출되는지 테스트하려면 어떻게해야합니까?Spring MVC : 주석 처리 된 특정 메소드 테스트가 수행된다.

public class myController { 
    @RequestMapping(value = "/create", method = RequestMethod.GET) 
    public ModelAndView create(ModelMap map) { 
      map.put("category", new Category()); 
      return new ModelAndView("views/someView", map); 
     } 
} 

어떻게 사람이 http://example.com/create URL을 요청하면이 create() 메소드가 호출되는 것을 테스트 할 :

예를 들어,이 컨트롤러 방법이있다.

답변

2

단위 테스트에서는 서블릿 기술을 사용하지 않고 컨트롤러의 Java 코드 만 테스트하면됩니다. 여러 가지 중 하나를 수행 할 수 있습니다 통합 테스트에서

:

요청, 응답 모의 객체를 포함하는 스프링 테스트 유물,에 org.springframework.mock.web 패키지를 사용,의 servletContext는 컨트롤러에서 가짜 요청을 발사하고를 읽어 가짜 응답의 데이터.

또는 전개 된 Webapp에 대해 작동하는 Selenium과 같은 웹 테스트 프레임 워크를 사용하십시오.

+0

감사합니다. Sean! 나는 너의 생각이 마음에 든다. 현재로서는 코드를 테스트하기로 결정한 후 통합 테스트를 수행하면서 요청 매핑을 테스트 할 것입니다. – Stealth

1

누구가 http://example.com/create url을 요청하면이 create() 메소드가 호출되는지 어떻게 테스트 할 수 있습니까?

정말 통합 테스트를하는 것처럼 보입니다. Sean Patrick Floyd는 이미 테스트 방법에 대해 언급했지만,이 옵션 중 아무 것도 URL에 대한 요청이 실제로 메소드를 호출하는지 테스트하지 않았습니다. - 조롱 방법은 요청을 시뮬레이트하고 셀레늄 테스트는 호출 만 반환 값을 테스트하지만 호출은 테스트하지 않습니다. 내 잘못을 저 지르지 마라. 나는이 두 가지 다른 테스트가 대부분의 경우에 더 쉽고 (테스트가 쉽고 더 유효한 테스트 결과가 더 좋다) 믿는다.하지만 실제로이 문제를 테스트하고 싶다면이 솔루션을 생각해 낼 것이다.

Selenium (또는 Selenium 2/Webdriver)과 같은 웹 테스트 프레임 워크를 사용하거나 HTTP 요청 만 생성하는 간단한 테스트 프레임 워크 만 사용하십시오. - 테스트를 수행하려면 배포 된 애플리케이션을 저주해야합니다. - 진정한 통합 테스트입니다.

메서드가 호출되는지 확인합니다. 로깅 도구 (Log4J)를 사용하는 것이 좋습니다. 그런 다음 AspectJ 또는 Spring AOP Support와 같은 도구를 사용하여 로깅 문을 컨트롤러 메소드에 추가하십시오. 로깅은 다른 대상에 기록한 다음 다른 로거에 기록하는 일부 기록원에 기록되어야합니다.

마지막 단계는 테스트가 http 요청을 보낸 후 예상 로깅 문이 로그 파일인지 확인해야합니다. (로깅이 비동기식 일 수 있다는 사실에 유의하십시오.)

관련 문제