Junit测试之File转MultipartFile和MultipartFile转File

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ljh_learn_from_base/article/details/84578009

在单元测试中我们有时候要测试文件上传功能,这就要使用到MultipartFile的两个重要子类:

CommonsMultipartFileMockMultipartFile

CommonsMultipartFile:主要用于在Controller接收前端Form表单文件上传控件中的文件

MockMultipartFile:mock有模拟,测试之意,顾名思义这个类就是用来单元测试用的

MultipartFile类结构
MultipartFile类层次结构示意图

既然要用到 单元测试,在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();

如果觉得好,请点个赞!

猜你喜欢

转载自blog.csdn.net/ljh_learn_from_base/article/details/84578009