Я пытаюсь смоделировать загрузку изображения в конечную точку контроллера, которая ожидает DTO, содержащего ввод MultipartFile вместе с несколькими текстовыми полями. Но я не могу издеваться над MultipartFile для отправки:
Вот мой тест:
@Test
public void saveAnEntryWhenPOSTNewUserWithAPicture() throws Exception {
MockMultipartFile multiPFImage = new MockMultipartFile("contactImgUpload", "abcpic.png",
"text/plain", "Generate bytes to simulate a picture".getBytes());
mockMvc.perform(MockMvcRequestBuilders.fileUpload("/newContact")
.file(multiPFImage)
.contentType(MediaType.MULTIPART_FORM_DATA)
.param("userId", "12345")
.param("name", "Picture Uploader User"))
.andExpect(status().isOk())
.andExpect(content().string(containsString("Picture Uploader User")))
.andExpect(content().string(containsString("Replace with image title")));
}
Метод controller, который мы тестируем:
@PostMapping(path = "/newContact")
public @ResponseBody ContactDTO createNewContact(@ModelAttribute ContactDTO newContact) {
//converts newContact to DAO and persists to DB
return newContact
}
DTO для преобразования:
public class ContactDTO implements Serializable {
private BigInteger userId;
private BigInteger contactId; //automatically generated on persistence
private String name;
private MultipartFile contactImgUpload;
}
Когда я запускаю тест, он терпит неудачу, и я получаю это сообщение:
.w.s.m.s.DefaultHandlerExceptionResolver: не удалось написать HTTP-сообщение: org.springframework.http.converter.HttpMessageNotWritableException: не удалось написать JSON: не найден сериализатор для класса java.io.ByteArrayInputStream и не обнаружено свойств для создания BeanSerializer (во избежание исключения отключите SerializationFeature. FAIL_ON_EMPTY_BEANS); вложенным исключением является com.fasterxml.jackson.databind.JsonMappingException: сериализатор не найден для класса java.io.ByteArrayInputStream и не обнаружено свойств для создания BeanSerializer (во избежание исключения отключите SerializationFeature.FAIL_ON_EMPTY_BEANS) (через цепочку ссылок: app.models.dto .ContactDTO["contactImgUpload"]->org.springframework.mock.web.MockMultipartFile["inputStream"])
Я видел несколько других случаев этого вопроса, но большинство из них не имеют ответов или не совсем то же самое. Любые идеи о том, как протестировать MockMultipartFile, который необходимо привязать к DTO?