版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ljh_learn_from_base/article/details/84578009
在单元测试中我们有时候要测试文件上传功能,这就要使用到MultipartFile的两个重要子类:
CommonsMultipartFile和MockMultipartFile
CommonsMultipartFile:主要用于在Controller接收前端Form表单文件上传控件中的文件
MockMultipartFile:mock有模拟,测试之意,顾名思义这个类就是用来单元测试用的
既然要用到 单元测试,在Spring中当然免不了要引入Spring的测试jar包:Spring-test-5.1.2.RELEASE.jar
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
<scope>test</scope>
</dependency>
先定义一个所有测试类的基类
package com.ljh.myo2o;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
/**
* @description:所有测试类的基类
* @author :ljh
*/
@RunWith(SpringJUnit4ClassRunner.class)
//告诉Junit spring的位置
@ContextConfiguration({"classpath:spring/spring-dao.xml","classpath:spring/spring-service.xml"})
public class BaseTest {
@Test
public void test() {
}
}
File转CommonsMultipartFile
package com.ljh.myo2o.dao;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.file.Files;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItem;
import org.apache.commons.io.IOUtils;
import org.junit.Test;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
import com.ljh.myo2o.BaseTest;
/**
* @description:File转CommonsMultipartFile
* @author :ljh
*/
public class FileUploadTest extends BaseTest {
@Test
public void testFileUpload() throws IOException {
File file = new File("C:/Users/hp/Pictures/4.jpg");
FileItem fileItem = new DiskFileItem(
"formFieldName",//form表单文件控件的名字随便起
Files.probeContentType(file.toPath()),//文件类型
false, //是否是表单字段
file.getName(),//原始文件名
(int) file.length(),//Interger的最大值可以存储两部1G的电影
file.getParentFile());//文件会在哪个目录创建
//最关键的一步:为DiskFileItem的OutputStream赋值
//IOUtils是org.apache.commons.io.IOUtils;
//与此类似的还有FileUtils
IOUtils.copy(new FileInputStream(file), fileItem.getOutputStream());
MultipartFile cMultiFile = new CommonsMultipartFile(fileItem);
System.out.println(cMultiFile.getOriginalFilename());
}
}
CommonsMultipartFile和MockMultipartFile转(写入)File
//创建目录
File dest = new File("D:/testHaha");
if (!dest.exists()) {
dest.mkdirs();
}
// 创建文件,并将4.jpg改为haha.jpg
File testFile = new File("D:/testHaha/haha.jpg");
//如果没有这个判断,会抛出文件拒绝访问异常
if (!testFile.exists()) {
testFile.createNewFile();
}
//写入文件
cMultiFile.transferTo(testFile);
CommonsMultipartFile转成File的第二种方式
//之所以使用这个判断是因为前面使用多态进行接收
if (cMultiFile instanceof CommonsMultipartFile) {
CommonsMultipartFile cFile=(CommonsMultipartFile) cMultiFile;
DiskFileItem fileItem2 = (DiskFileItem)cFile.getFileItem();
File storeLocation = fileItem2.getStoreLocation();
System.out.println(storeLocation.getAbsolutePath());
}
File转MockMultipartFile
InputStream inputStream = new FileInputStream(new File("C:/Users/hp/Pictures/timg.jpeg"));
MultipartFile multipartFile = new MockMultipartFile("timg.jpeg", "timg.jpeg", null, inputStream);
String name = multipartFile .getOriginalFilename();
如果觉得好,请点个赞!