如何只给出一个文件来创建CommonsMultipartFile对象

wsa*_*ams 14 spring file-upload spring-mvc apache-commons

我有一个junit测试方法,它将CommonsMultipartFile对象作为参数.

我正在尝试创建一个FileItem对象,以便将其传递给构造函数,

CommonsMultipartFile(org.apache.commons.fileupload.FileItem fileItem)
Run Code Online (Sandbox Code Playgroud)

为此,我尝试使用DiskFileItem构造函数创建FileItem对象,

DiskFileItem(java.lang.String fieldName, java.lang.String contentType, boolean isFormField, java.lang.String fileName, int sizeThreshold, java.io.File repository)
Run Code Online (Sandbox Code Playgroud)

但我不知道如何传递任何这些参数.

我所有这些都在Spring 3 MVC控制器中工作,但是为了进行junit测试,我需要传递一个方法两个对象.一个是UploadItem对象,如下所示,

import org.springframework.web.multipart.commons.CommonsMultipartFile;

public class UploadItem {
 private String fileName;
 private String filePath;
 private CommonsMultipartFile fileData;

 public String getFileName() {
  return fileName;
 }

 public void setFileName(String fileName) {
  this.fileName = fileName;
 }

 public String getFilePath() {
  return filePath;
 }

 public void setFilePath(String filePath) {
  this.filePath = filePath;
 }

 public CommonsMultipartFile getFileData() {
  return fileData;
 }

 public void setFileData(CommonsMultipartFile fileData) {
  this.fileData = fileData;
 }
}
Run Code Online (Sandbox Code Playgroud)

setFileData()方法需要CommonsMultipartFile对象,我试图在我的src/test/resources目录中创建一个文件.

有谁知道如何获取文件,创建一个FileItem对象并将其传递给CommonsMultipartFile对象构造函数?

谢谢.如果有什么不清楚,请告诉我 - 我不熟悉Spring MVC文件上传.

Ral*_*lph 31

使用更常见的界面org.springframework.web.multipart.MultipartFile.而不是 org.springframework.web.multipart.commons.CommonsMultipartFile在您的Command(UploadItem)中.(CommonsMultipartFile是接口的1:1实现).

现在您可以CommonsMultipartFile使用mock类创建一个实例org.springframework.mock.web.MockMultipartFile.(这是元素spring-test.jar).

然后在测试中创建MultipartFile只是一个语句,没有任何强制转换:

MockMultipartFile mockMultipartFile = new MockMultipartFile(
       "test.txt",                //filename
       "Hallo World".getBytes()); //content
Run Code Online (Sandbox Code Playgroud)