2010-04-29 5 views
11

Ich habe eine Junit-Testmethode, die ein CommonsMultipartFile-Objekt als Parameter verwendet.Erstellen CommonsMultipartFile-Objekt nur eine Datei

Ich versuche, ein FileItem Objekt zu erstellen, so dass ich es an den Konstruktor übergeben kann,

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

, das zu tun, ich versuche das FileItem Objekt mit dem DiskFileItem Konstruktor zu erstellen,

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

aber ich bin mir nicht sicher, wie man irgendwelche dieser Parameter übergibt.

Ich habe das alles in einem Spring 3 MVC-Controller arbeiten, aber meine Junit-Tests zu tun, muss ich eine Methode zwei Objekte übergeben. Eine davon ist das UploadItem Objekt, das wie folgt aussieht,

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

Die setFileData() Methode erfordert das CommonsMultipartFile Objekt, das ich versuche nur, eine Datei in meinem src/test/Ressourcen-Verzeichnis angegeben zu erstellen.

Würde jemand wissen, wie ich eine Datei nehmen kann, erstellen Sie ein FileItem-Objekt und übergeben Sie das an den CommonsMultipartFile -Objektkonstruktor?

Danke. Wenn etwas unklar ist, lass es mich wissen - ich bin nicht so vertraut mit Spring MVC Datei-Uploads.

Antwort

30

Verwenden Sie die allgemeinere Schnittstelle org.springframework.web.multipart.MultipartFile. anstelle von org.springframework.web.multipart.commons.CommonsMultipartFile in Ihrem Befehl (UploadItem). (CommonsMultipartFile ist eine 1: 1 Implementierung der Schnittstelle).

Jetzt können Sie eine Instanz von CommonsMultipartFile mit der Scheinklasse org.springframework.mock.web.MockMultipartFile erstellen. (welches Element von spring-test.jar ist).

Dann ist die Schaffung eines MultipartFile in den Tests ist nur eine Anweisung, ohne Besetzung:

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

Wie dies keine Hilfe ist? Sie setzen nicht die Datei auf dem Wunsch, sollte es wie folgt verwendet werden:

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

ich mit dem Argumente CommonsMultipartFile ein Verfahren verwenden, sonst es MockMultipartFile direkt verwendet haben könnte.

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