Programing

URL 문자열에서 모의 ​​HttpServletRequest 만들기?

lottogame 2020. 12. 8. 07:39
반응형

URL 문자열에서 모의 ​​HttpServletRequest 만들기?


특히 request.getParameterMap 및 request.getParameter를 사용하여 개체를 생성하는 HttpServletRequest 개체에서 일부 작업을 수행하는 서비스가 있습니다.

제공된 URL을 문자열 형식으로 가져 오는 간단한 방법이 있는지 궁금합니다.

String url = "http://www.example.com/?param1=value1&param";

단위 테스트로 테스트 할 수 있도록 HttpServletRequest 객체로 쉽게 변환 할 수 있습니까? 아니면 적어도 request.getParameterMap 및 request.getParameter가 올바르게 작동하도록?


Spring은 spring-test 모듈에 MockHttpServletRequest가지고 있습니다.

maven을 사용하는 경우 pom.xml에 적절한 종속성을 추가해야 할 수 있습니다 . mvnrepository.com 에서 spring-test를 찾을 수 있습니다 .


조롱하는 가장 간단한 방법 HttpServletRequest:

  1. 익명의 하위 클래스를 만듭니다.

    HttpServletRequest mock = new HttpServletRequest ()
    {
        private final Map<String, String[]> params = /* whatever */
    
        public Map<String, String[]> getParameterMap()
        {
            return params;
        }
    
        public String getParameter(String name)
        {
            String[] matches = params.get(name);
            if (matches == null || matches.length == 0) return null;
            return matches[0];
        }
    
        // TODO *many* methods to implement here
    };
    
  2. 사용 jMock , Mockito , 또는 다른 범용 조롱 프레임 워크 :

    HttpServletRequest mock = context.mock(HttpServletRequest.class); // jMock
    HttpServletRequest mock2 = Mockito.mock(HttpServletRequest.class); // Mockito
    
  3. HttpUnit의 ServletUnit을 사용 하고 요청을 전혀 모의하지 마십시오.


MockHttpServletRequest를 사용하는 방법은 다음과 같습니다.

// given
MockHttpServletRequest request = new MockHttpServletRequest();
request.setServerName("www.example.com");
request.setRequestURI("/foo");
request.setQueryString("param1=value1&param");

// when
String url = request.getRequestURL() + '?' + request.getQueryString(); // assuming there is always queryString.

// then
assertThat(url, is("http://www.example.com:80/foo?param1=value1&param"));

일반적으로 서비스에 실제로 연결되는 통합 테스트에서 이러한 종류의 것들을 테스트합니다. 단위 테스트를 수행하려면 서블릿의 doGet / doPost 메소드에서 사용하는 객체를 테스트해야합니다.

일반적으로 서블릿 메소드에 많은 코드를 갖고 싶지는 않습니다. 작업을 처리하고 서블릿 API 객체가 아닌 자신의 객체를 전달하는 빈 클래스를 만들고 싶을 것입니다.

참고 URL : https://stackoverflow.com/questions/6455359/creating-a-mock-httpservletrequest-out-of-a-url-string

반응형