springBoot项目文件上传的单元测试

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 文件夹下即可。

image.png

放好了文件就可以读取了,这里使用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来做的但是能简单实现代码覆盖啦。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容