6 Stimmen

Wie man Unit-Test ein ResponseBody oder ResponseEntity von einem Frühling mvc Controller gesendet?

Wenn ich Junit-Tests tun, tue ich so etwas wie dieses Frühjahr mvc-Controller zu testen:

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

wo der getestete Controller wie aussieht:

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

Aber ich finde nicht, wie ich die ResponseBody Antwort der so definierten Request Handler :

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

        return datas;
    }

0 Stimmen

Ich habe mich umgesehen und eine andere Lösung gefunden, die in meinem Fall funktioniert: stackoverflow.com/questions/9138555/ Es scheint sehr einfach zu implementieren zu sein und es passt gut zu meinem Testcode.

3voto

skaffman Punkte 389758

Ihr Unit-Test muss nur den Inhalt des Rückgabewerts der Methode überprüfen:

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

En @ResponseBody Vermerk ist irrelevant. Dies ist einer der großen Vorteile von annotierten Controllern - Ihre Unit-Tests können sich auf die Geschäftslogik konzentrieren, nicht auf die Framework-Mechanik. Bei Controllern vor der Annotation wird die Hälfte des Testcodes damit verbracht, Mock-Requests, -Antworten und damit verbundenen Schnickschnack zu konstruieren. Das ist eine Ablenkung.

Das Testen, ob die Anmerkungen Ihres Codes ordnungsgemäß in das Framework integriert sind, ist Aufgabe von Integrations- und/oder Funktionstests.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X