Как создать объект 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;
}