springBoot项目文件上传的单元测试
被文件上传的单元测试困扰了好久今天终于有时间研究一下了,话不多说直接上代码。
代码
//new一个资源上传的对象
ResourceInfo resourceInfo = new ResourceInfo();
resourceInfo.setResourceTitle("test");
MockMultipartFile mockMultipartFile = new MockMultipartFile(
"file",
"hello.png",
MediaType.IMAGE_PNG_VALUE,
"".getBytes()
);
final MvcResult mvcResult = mvc.perform(
MockMvcRequestBuilders
.multipart("/resourceUpload")
.file(mockMultipartFile)
.param("userId", "uesrId")
.contentType(MediaType.APPLICATION_JSON_VALUE)
.content(JSONUtil.toJsonStr(resourceInfo)))
.andDo(MockMvcResultHandlers.print()).andReturn();
上面是一个普通的文件上传的单测,简单模拟了一个文件,但文件不是真是存在的,通过在 MockMultipartFile 对象中设置相应的文件属性就可以了。但是在通常的文件上传中需要验证文件内容,如读取视频文件的流、excel表格的数据等;这时候简单的模拟已经不能满足数据需求,这时候就需要将真实的测试文件放上去;作为洗个小白,一直在摸索中前进,一直困于如何读取到文件和如何将读取的文件转换成 MultipartFile 文件对象。这里很简单,只需要将文件放到 main 文件夹下的 resource 文件夹下即可。
放好了文件就可以读取了,这里使用xxx.class.getResource("/file/hk.mp4")读取文件,我是直接使用的单元测试类的类名。下面给出完整示例:
//new一个资源上传的对象
ResourceInfo resourceInfo = new ResourceInfo();
resourceInfo.setResourceTitle("test");
//读取文件 "file/hk.mp4"
File file = new File(ResourceInfoTest.class.getResource("/file/hk.mp4").getFile());
FileInputStream inputStream = new FileInputStream(file);
MockMultipartFile mockMultipartFile = new MockMultipartFile(
"file",
"hello.png",
MediaType.IMAGE_PNG_VALUE,
inputStream
);
final MvcResult mvcResult = mvc.perform(
MockMvcRequestBuilders
.multipart("/resourceUpload")
.file(mockMultipartFile)
.param("userId", "user1")
.contentType(MediaType.APPLICATION_JSON_VALUE)
.content(JSONUtil.toJsonStr(resourceInfo)))
.andDo(MockMvcResultHandlers.print()).andReturn();
到这就写完了,可以去跑单测了,虽然不是使用mock来做的但是能简单实现代码覆盖啦。