我正在尝试模拟将图像上传到控制器端点,该端点期望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")));
}
我们正在测试的控制器方法:
@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”])
我已经看过这个问题的其他几个例子,但大多数没有答案,或者不完全相同。关于如何测试需要绑定到DTO的MockMultipartFile的任何想法?
答案 0 :(得分:2)
您可以使用:
@Autowired
private ObjectMapper mapper;
@Before
public void before() {
mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
}