springBoot項(xiàng)目文件上傳的單元測試
被文件上傳的單元測試?yán)_了好久今天終于有時(shí)間研究一下了,話不多說直接上代碼。
代碼
//new一個(gè)資源上傳的對象
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();
上面是一個(gè)普通的文件上傳的單測,簡單模擬了一個(gè)文件,但文件不是真是存在的,通過在 MockMultipartFile 對象中設(shè)置相應(yīng)的文件屬性就可以了。但是在通常的文件上傳中需要驗(yàn)證文件內(nèi)容,如讀取視頻文件的流、excel表格的數(shù)據(jù)等;這時(shí)候簡單的模擬已經(jīng)不能滿足數(shù)據(jù)需求,這時(shí)候就需要將真實(shí)的測試文件放上去;作為洗個(gè)小白,一直在摸索中前進(jìn),一直困于如何讀取到文件和如何將讀取的文件轉(zhuǎn)換成 MultipartFile 文件對象。這里很簡單,只需要將文件放到 main 文件夾下的 resource 文件夾下即可。

image.png
放好了文件就可以讀取了,這里使用xxx.class.getResource("/file/hk.mp4")讀取文件,我是直接使用的單元測試類的類名。下面給出完整示例:
//new一個(gè)資源上傳的對象
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來做的但是能簡單實(shí)現(xiàn)代碼覆蓋啦。