15

我有一个将 CommonsMultipartFile 对象作为参数的 junit 测试方法。

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

CommonsMultipartFile(org.apache.commons.fileupload.FileItem fileItem)

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

DiskFileItem(java.lang.String fieldName, java.lang.String contentType, boolean isFormField, java.lang.String fileName, int sizeThreshold, java.io.File repository)

但我不确定如何传递任何这些参数。

我在 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;
 }
}

setFileData() 方法需要我尝试创建的 CommonsMultipartFile 对象,该对象只是在我的 src/test/resources 目录中给定一个文件。

有人知道我如何获取文件、创建 FileItem 对象并将其传递给 CommonsMultipartFile 对象构造函数吗?

谢谢。如果有任何不清楚的地方,请告诉我——我对 Spring MVC 文件上传不太熟悉。

4

2 回答 2

33

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

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

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

MockMultipartFile mockMultipartFile = new MockMultipartFile(
       "test.txt",                //filename
       "Hallo World".getBytes()); //content
于 2011-07-26T09:18:55.917 回答
-2

How is this of any help? you don't set the file on the request, it should be used like this:

MultipartFile multipartFile = getMockCommonsMultipartFile(BULK_CSV);
MockMultipartHttpServletRequest request = new MockMultipartHttpServletRequest();
request.addFile(multipartFile);
CommonsMultipartFile commonsMultipartFile = (CommonsMultipartFile) request.getFile(BULK_CSV);

I am using a method with the argument CommonsMultipartFile, otherwise I could have used MockMultipartFile directly.

 private MultipartFile getMockCommonsMultipartFile(String name, String path) throws IOException {
        InputStream is = getClass().getResourceAsStream(path);
        MultipartFile multipartFile = new MockMultipartFile(name, name, "", is);
        return multipartFile;
    }
于 2014-06-16T14:33:16.983 回答