Не удается протестировать MockMultipartFile с помощью Spring Boot Test — сериализатор не найден

Я пытаюсь смоделировать загрузку изображения в конечную точку контроллера, которая ожидает 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?


person NateH06    schedule 11.10.2017    source источник


Ответы (1)


Вы можете использовать это:

@Autowired
private ObjectMapper mapper;

@Before
public void before() {
    mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
}
person Médéric Martin    schedule 19.03.2018