Я хочу протестировать свой метод контроллера, который использует=MediaType.Только ЗНАЧЕНИЕ MULTIPART_FORM_DATA_VALUE

#java #unit-testing #mockito #mockmvc #springmockito

Вопрос:

Я использую MockMvc для тестирования. Как я могу отправить платеж в значение объекта в MockMvc.выполните, которое я могу получить методом контроллера.

Например, PaymentOrderDto.setMid(«m1») и т. Д.

 @PostMapping(consumes = MediaType.MULTIPART_FORM_DATA_VALUE, produces= MediaType.APPLICATION_JSON_VALUE)

public ResponseEntity<String> createPaymentOrder(HttpServletRequest request, PaymentOrderDto paymentOrderDto,
                                                     @RequestPart(required = false) MultipartFile paymentReceiptFile,
                                                     @RequestParam(value = "contactId", required = true) String contactId,
                                                     HttpServletResponse response) {
                        
--method  body                           

}

List item
 

Ответ №1:

вы можете сделать это следующим образом;

Конечная точка контроллера;

 @PostMapping(value = "createPaymentOrder", consumes = MediaType.MULTIPART_FORM_DATA_VALUE, produces= MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<String> createPaymentOrder(HttpServletRequest request,
                                                 @RequestPart PaymentOrderDto paymentOrderDto,
                                                 @RequestPart(required = false) MultipartFile paymentReceiptFile,
                                                 @RequestParam(value = "contactId", required = true) String contactId,
                                                 HttpServletResponse response) {
    return new ResponseEntity<String>(contactId   ":"   paymentOrderDto.getMid(), HttpStatus.OK);
}
 

Функция тестирования;

 @Test
void testMe() throws Exception {
    MockMultipartFile employeeJson = new MockMultipartFile("paymentOrderDto", null,
            "application/json", "{"mid": "10"}".getBytes());
    mockMvc.perform(MockMvcRequestBuilders.multipart("/createPaymentOrder")
            .file(employeeJson)
            //.file("") --> paymentReceiptFile which is not mandatory
            .accept(MediaType.parseMediaType("application/json"))
            .param("contactId", "C1")
            .contentType(MediaType.MULTIPART_FORM_DATA_VALUE))
            .andExpect(status().isOk())
            .andExpect(content().contentType("application/json"))
            .andDo(print())
            .andExpect(mvcResult -> "C1:10".equals(mvcResult));
}