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¶m";
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¶m");
// when
String url = request.getRequestURL() + ''?'' + request.getQueryString(); // assuming there is always queryString.
// then
assertThat(url, is("http://www.example.com:80/foo?param1=value1¶m"));
Maneras más HttpServletRequest
burlarse de una HttpServletRequest
:
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 };
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
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 .