servlet metodos dopost doget java mocking servlets

java - metodos - ¿Creando una falsa HttpServletRequest fuera de una cadena url?



doget java (4)

Tengo un servicio que hace algún trabajo en un objeto HttpServletRequest, utilizando específicamente request.getParameterMap y request.getParameter para construir un objeto.

Me preguntaba si hay una manera directa de tomar una url proporcionada, en forma de cadena, decir

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

y convertirlo fácilmente a un objeto HttpServletRequest para que pueda probarlo con mis pruebas unitarias? ¿O al menos solo para que request.getParameterMap y request.getParameter funcionen correctamente?


Aquí está cómo usar 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"));


Maneras más HttpServletRequest burlarse de una HttpServletRequest :

  1. Crea una subclase anónima:

    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. Use jMock , Mockito o algún otro marco de burla de propósito general:

    HttpServletRequest mock = context.mock(HttpServletRequest.class); // jMock HttpServletRequest mock2 = Mockito.mock(HttpServletRequest.class); // Mockito

  3. Use la ServletUnit de ServletUnit y no se ServletUnit la solicitud en absoluto.


Por lo general, debería probar este tipo de cosas en una prueba de integración, que en realidad se conecta a un servicio. Para hacer una prueba unitaria, debe probar los objetos usados ​​por los métodos doGet / doPost de su servlet.

En general, no desea tener mucho código en sus métodos de servlet, le gustaría crear una clase de bean para manejar las operaciones y pasarle sus propios objetos y no los objetos de la API de servlet.


Spring tiene MockHttpServletRequest en su módulo de prueba de primavera.

Si está utilizando maven, es posible que necesite agregar la dependencia adecuada a su pom.xml . Puede encontrar la prueba de primavera en mvnrepository.com .