2017-11-08 5 views
0

Ich mag einen einfachen Test für einen meiner @RestController schreiben und behaupten, dass der Eingang @RequestBody hat zum PersonDTO richtig zugeordnet wurde:Wie testet man @RequestBody eines @RestControllers mit Junit?

@RestController 
public class PersonServlet { 
    @PostMapping("/person") 
    public PersonRsp find(@RequestBody PersonDTO dto) { 
     //business logic 
    } 
} 

public class PersonDTO { 
    private String firstname, lastname; 
} 

Frage: Wie kann ich einen JSON Anforderungstext zu diesem Servlet schicken. Und mehr inspizieren die PersonDTO Felder, die alle richtig eingestellt wurden?

Es ist wahrscheinlich ähnlich, aber ich weiß nicht, wie man den geparsten DTO inspiziert/spioniert?

@RunWith(SpringRunner.class) 
@WebMvcTest(PersonSerlvet.class) 
public class PersonTests { 
    @Autowired 
    private MockMvc mvc; 

    @Test 
    public void testExample() throws Exception { 
     this.mvc.perform(get("/person")) 
       .andExpect(status().isOk()); 
    } 
} 

@Duplicate Marker: Dies ist kein Duplikat der verknüpften Frage (die im Begriff ist, wie die Antwort Körper Zeichenfolge zu lesen). Ich frage eigentlich nach Anfrage Körper testen.

+0

¿mit einem Logger? –

+0

Ich glaube nicht, Validierung der Logger-Ausgabe ist eine gute Einheit Test Assertion! – membersound

+0

In Fack fragen Sie nicht nach einem Komponententest, Sie möchten einen Integrationstest durchführen. Wenn Sie die Eingabe in einem Test testen und nicht für die Produktion ändern möchten, können Sie einen Scheinappender oder einen Methodenabfanger verwenden. –

Antwort

2

Testen der deserialising von Json zu einem DTO ist nicht wirklich die Verantwortung des Controllers, würden Sie das das zugrunde liegende Objekt Mapper werden testen, die eine externe Bibliothek (Jackson, Gson .. ??)

Nicht sicher, welche Bibliothek verwendet wird, aber wenn Sie Ihre Verwendung testen möchten, müssen Sie den entsprechenden Objekt-Mapper auf ähnliche Weise wie Ihr Anwendungs-Framework manuell erstellen und seine API zum Serialisieren von der JSON-Zeichenfolge zum Ziel-DTO

verwenden
+0

Ok, ich sehe, aber ich würde lieber den Objekt-Mapper testen, der im Spring-Kontext erstellt wurde, und nicht ein Objekt-Mapper, der anders ist (dh er wurde nur während des Tests erstellt). – membersound

+0

Ja, das ist verständlich, können Sie es direkt im Kontext des Tests @Autowired autogiren private ObjectMapper objectMapper; ? – tom01

Verwandte Themen