2010-04-29 3 views
11

J'ai une méthode de test junit qui prend en paramètre un objet CommonsMultipartFile.Comment créer un objet CommonsMultipartFile avec un seul fichier

Je suis en train de créer un objet FileItem pour que je puisse le transmettre au constructeur,

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

Pour ce faire, je suis en train de créer l'objet FileItem à l'aide du constructeur DiskFileItem,

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

mais je ne sais pas comment passer l'un de ces paramètres.

J'ai tout cela dans un contrôleur Spring 3 MVC, mais pour faire mes tests junit, je dois passer une méthode à deux objets. L'un est l'objet UploadItem qui ressemble à ce qui suit,

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

La méthode setFileData() nécessite l'objet CommonsMultipartFile que je suis en train de créer juste un fichier donné dans mon répertoire src/test/resources.

Est-ce que quelqu'un pourrait savoir comment je peux prendre un fichier, créer un objet FileItem et le passer au constructeur d'objet CommonsMultipartFile?

Merci. Si quelque chose n'est pas clair, s'il vous plaît faites le moi savoir - je ne suis pas familier avec les téléchargements de fichiers Spring MVC.

Répondre

30

Utilisez l'interface plus commune org.springframework.web.multipart.MultipartFile. au lieu de org.springframework.web.multipart.commons.CommonsMultipartFile dans votre commande (UploadItem). (CommonsMultipartFile est une implémentation 1: 1 de l'interface).

Vous pouvez maintenant créer une instance de CommonsMultipartFile avec la classe de simulation org.springframework.mock.web.MockMultipartFile. (qui est l'élément de spring-test.jar).

Ensuite, la création d'un MultipartFile dans les tests qu'une seule instruction, sans aucun casting:

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

Comment est-ce de l'aide? vous ne définissez pas le fichier sur la demande, il doit être utilisé comme ceci:

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

J'utilise une méthode avec l'argument CommonsMultipartFile, sinon je aurais pu utiliser MockMultipartFile directement.

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