2010-04-29 50 views
11

我有一個將CommonsMultipartFile對象作爲參數的junit測試方法。如何創建僅給定文件的CommonsMultipartFile對象

我試圖創建的FileItem對象,以便我可以將它傳遞給構造函數,

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

爲了做到這一點,我試圖創建一個使用DiskFileItem構造函數的FileItem對象,

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()方法需要,我想創建只是給出一個文件在我的src /測試/資源目錄的CommonsMultipartFile對象。

有人會知道我怎麼可以拿一個文件,創建一個FileItem對象,並將其傳遞給CommonsMultipartFile對象的構造函數?

謝謝。如果有什麼不清楚的地方,請告訴我 - 我不熟悉Spring MVC文件上傳。

回答

30

使用更常見的接口org.springframework.web.multipart.MultipartFile。而不是您的Command(UploadItem)中的 org.springframework.web.multipart.commons.CommonsMultipartFile。 (CommonsMultipartFile是Interface的1:1實現)。

現在您可以使用模擬類org.springframework.mock.web.MockMultipartFile創建CommonsMultipartFile的實例。 (這是spring-test.jar的元素)。

然後,一個MultipartFile在測試的創建只有一個說法,沒有任何投:

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

如何是任何幫助嗎?您沒有設置該文件的要求,就應該像這樣使用:

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; 
    } 
相關問題