2010-04-29 12 views
11

Mam junit metoda testowa, która ma Commons MemoripartFile obiektu jako parametr.Jak utworzyć obiekt CommonsMultipartFile podany tylko plik

Próbuję utworzyć obiekt FileItem więc mogę przekazać go do konstruktora,

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

Aby to zrobić, próbuję utworzyć obiekt FileItem pomocą konstruktora DiskFileItem,

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

ale nie jestem pewien, jak przekazać którykolwiek z tych parametrów.

Mam wszystko działa w kontroler MVC Spring 3, ale do moich testów współdziała, muszę przekazać metodę dwóch obiektów. Jednym z nich jest przedmiotem UploadItem która wygląda jak poniżej,

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

Sposób setFileData() wymaga obiekt CommonsMultipartFile które Próbuję utworzyć tylko dany plik w moim src/test/katalogu zasobów.

Czy ktoś wie, w jaki sposób mogę pobrać plik, utworzyć obiekt FileItem i przekazać go do konstruktora obiektu CommonsMultipartFile?

Dzięki. Jeśli coś jest niejasne, daj mi znać - nie jestem zaznajomiony z wczytywaniem plików Spring MVC.

Odpowiedz

30

Użyj bardziej powszechnego interfejsu org.springframework.web.multipart.MultipartFile. zamiast org.springframework.web.multipart.commons.CommonsMultipartFile w Twoim poleceniu (UploadItem). (CommonsMultipartFile to implementacja interfejsu w stosunku 1: 1).

Teraz można utworzyć wystąpienie CommonsMultipartFile z próbną klasą org.springframework.mock.web.MockMultipartFile. (który jest elementem z spring-test.jar).

Wtedy stworzenie MultipartFile w testach jest tylko jedna instrukcja, bez obsady:

MockMultipartFile mockMultipartFile = new MockMultipartFile(
     "test.txt",    //filename 
     "Hallo World".getBytes()); //content 
0

Jak to żadnej pomocy? nie ustawisz plik na żądanie, powinien on być wykorzystywany tak:

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

Używam metody z argumentem CommonsMultipartFile, w przeciwnym razie może użyłem MockMultipartFile bezpośrednio.

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