Как создать объект CommonsMultipartFile, учитывая только файл

у меня есть метод теста junit, который принимает объект CommonsMultipartFile в качестве параметра.

Я пытаюсь создать объект FileItem, чтобы передать его конструктору,

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

для этого я пытаюсь создать объект FileItem с помощью конструктора DiskFileItem,

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.

2 ответов


используйте более общий интерфейс 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

как это может помочь? вы не устанавливаете файл на запрос, он должен использоваться следующим образом:

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

Я использую метод с аргументом CommonsMultipartFile, иначе я мог бы использовать MockMultipartFile напрямую.

 private MultipartFile getMockCommonsMultipartFile(String name, String path) throws IOException {
        InputStream is = getClass().getResourceAsStream(path);
        MultipartFile multipartFile = new MockMultipartFile(name, name, "", is);
        return multipartFile;
    }