2011-03-22 1 views
5

Quando faccio i test JUnit, faccio qualcosa di simile ai controller MVC primavera prova:Come testare un ResponseBody o ResponseEntity inviato da un controller mvc spring?

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

dove regolatore testato è come:

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

Ma non trovo come ottenere il ResponseBody risposta dei gestori di richieste definite in questo modo:

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

     return datas; 
    } 
+0

guardandomi intorno ho trovato un'altra soluzione che nel mio caso funziona: http://stackoverflow.com/questions/9138555/spring-framework-test-restful-web-service-controller-offline-ie-no-server- n Sembra molto facile da implementare e si adatta perfettamente al mio codice di test. – emas

risposta

3

Il test di unità deve solo verificare il contenuto del valore di ritorno del me ThOD:

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

Il @ResponseBody annotazione è irrilevante. Questo è uno dei grandi vantaggi dei controller annotati: i test delle unità possono concentrarsi sulla logica di business, non sulla meccanica del framework. Con i controllori di pre-annotazione, metà del codice di test viene impiegato per costruire richieste simulate, risposte e gubbin associati del genere. È una distrazione.

Verificare che le annotazioni del codice si integrino correttamente con il framework è il lavoro di integrazione e/o test funzionali.

+0

Inoltre, per un risultato ResponseEntity è possibile chiamare getBody per ottenere i risultati. cioè ResponseEntity risultati = controller.search ("valore"); MyObject obj = results.getBody(); assertThat (obj, ...) – digitaljoel

+0

Spero che non sia una cattiva forma collegarmi al mio blog. A febbraio ho scritto le voci direttamente correlate ai controller di test. http://digitaljoel.nerd-herders.com/2011/02/05/mock-testing-spring-mvc-controller/ e http://digitaljoel.nerd-herders.com/2011/02/05/using-mockito -to-test-spring-mvc-ajax-interaction/con quest'ultimo test un metodo che restituisce ResponseEntity. – digitaljoel

+0

Ok, grazie per la tua risposta skaffman, hai ragione, ho solo bisogno di verificare il contenuto del valore restituito. – Nico