Как создать объект 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?
Спасибо. Если что-то неясно, сообщите мне - я не знаком с загрузкой файлов MVC Spring.
Ответы
Ответ 1
Используйте более общий интерфейс org.springframework.web.multipart.MultipartFile
. вместо
org.springframework.web.multipart.commons.CommonsMultipartFile
в вашей команде (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
Ответ 2
Как это может помочь? вы не устанавливаете файл в запросе, его следует использовать следующим образом:
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;
}