2011-03-22 15 views
5

Cuando hago pruebas junit, hago algo como esto a los controladores MVC primavera prueba:¿Cómo se prueba un ResponseBody o ResponseEntity enviado por un controlador mvc de muelles?

request.setRequestURI("/projects/"+idProject+"/modify"); 
ModelAndView mv = handlerAdapter.handle(request, response, controller); 

donde el controlador probado es como:

@RequestMapping(value = "{id}/modify") 
public String content(ModelMap model, @PathVariable("id") Project object) { 

Pero no encuentro cómo obtener el ResponseBody respuesta de los controladores de solicitud definidos de la siguiente manera:

@RequestMapping("/management/search") 
public @ResponseBody ArrayList<SearchData> search(@RequestParam("q")) { 
     .... 
       .... 
     ArrayList<SearchData> datas = ....; 

     return datas; 
    } 
+0

buscando alrededor Encontré otra solución que en mi caso funciona: http://stackoverflow.com/questions/9138555/spring-framework-test-restful-web-service-controller-offline-ie-no-server- n Parece muy fácil de implementar y encaja muy bien con mi código de prueba. – emas

Respuesta

3

Su prueba de unidad solo necesita verificar el contenido del valor de retorno del yo DTO:

ArrayList<SearchData> results = controller.search("value"); 
assertThat(results, ...) 

El @ResponseBody anotación es irrelevante. Este es uno de los grandes beneficios de los controladores anotados: sus pruebas unitarias pueden enfocarse en la lógica comercial, no en la mecánica del marco. Con los controladores de preanotación, la mitad del código de prueba se usa para construir solicitudes de simulacro, respuestas y gubbins asociados de esa manera. Es una distracción.

La prueba de que las anotaciones de su código se integran correctamente con el marco es trabajo de integración y/o pruebas funcionales.

+0

Además, para obtener un resultado de ResponseEntity, simplemente puede llamar a getBody para obtener los resultados. es decir, ResponseEntity results = controller.search ("value"); MyObject obj = results.getBody(); assertThat (obj, ...) – digitaljoel

+0

Espero que no esté mal forma vincular a mi propio blog. En febrero escribí entradas directamente relacionadas con los controladores de prueba. http://digitaljoel.nerd-herders.com/2011/02/05/mock-testing-spring-mvc-controller/ y http://digitaljoel.nerd-herders.com/2011/02/05/using-mockito -to-test-spring-mvc-ajax-interaction/con este último probando un método que devuelve ResponseEntity. – digitaljoel

+0

Ok gracias por su respuesta skaffman, tiene razón. Solo necesito verificar el contenido del valor devuelto. – Nico

Cuestiones relacionadas