2010-04-29 24 views
11

Tengo un método de prueba junit que toma un objeto CommonsMultipartFile como parámetro.Cómo crear el objeto CommonsMultipartFile dado solo un archivo

Estoy intentando crear un objeto FileItem para que pueda pasarlo al constructor,

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

Para hacer eso, yo estoy tratando de crear el objeto FileItem utilizando el constructor DiskFileItem,

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

pero no estoy seguro de cómo pasar ninguno de esos parámetros.

Tengo todo esto funcionando en un controlador Spring 3 MVC, pero para hacer mis pruebas junit, necesito pasar un método de dos objetos. Uno de ellos es el objeto UploadItem que se parece a la siguiente,

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

El método setFileData() requiere el objeto CommonsMultipartFile la que estoy tratando de crear un archivo que acabamos de dar en mi directorio src/test/recursos.

¿Alguien sabría cómo puedo tomar un archivo, crear un objeto FileItem y pasarlo al constructor de objetos CommonsMultipartFile?

Gracias. Si algo no está claro, hágamelo saber: no estoy tan familiarizado con las cargas de archivos Spring MVC.

Respuesta

30

Utilice la interfaz más común org.springframework.web.multipart.MultipartFile. en lugar de org.springframework.web.multipart.commons.CommonsMultipartFile en su comando (UploadItem). (CommonsMultipartFile es una implementación 1: 1 de la interfaz).

Ahora puede crear una instancia de CommonsMultipartFile con la clase simulada org.springframework.mock.web.MockMultipartFile. (que es un elemento de spring-test.jar).

A continuación, la creación de un MultipartFile en las pruebas es sólo una declaración, sin ningún tipo de reparto:

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

cómo es esto de alguna ayuda? no se establece el archivo de la solicitud, que debe ser usado de esta manera:

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

estoy usando un método con el argumento CommonsMultipartFile, de lo contrario podría haber utilizado MockMultipartFile directamente.

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