使用MultipartFile作为参数的测试方法

时间:2015-05-26 12:36:13

标签: spring spring-mvc powermock

我有这个方法

@RequestMapping(value = "/upload", method = RequestMethod.POST, produces = "text/plain")
@ResponseBody
public String uploadFile(@RequestParam("file") MultipartFile file) {
    LOGGER.debug("Attempt to upload file with template.");
    try {
        return FileProcessUtils.processFileUploading(file);
    } catch (UtilityException e) {
        LOGGER.error("Failed to process file.", e.getWrappedException());
        return null;
    }
}

我想使用junitpowermock来测试它。

@Test
public void testUploadFile() {
    MultipartFile file = buildMultipartFile();
    mockStatic(FileProcessUtils.class);
    FileProcessUtils.processFileUploading(file);
    expectLastCall().andReturn(FILE_CONTENT);
    replay(FileProcessUtils.class);
    String fileContent = templateSupportRest.uploadFile(file);
    verify(FileProcessUtils.class);
    assertEquals(FILE_CONTENT, fileContent);
}

但问题是我需要以某种方式将MultipartFile对象传递给特定的FILE_CONTENT。 为此,我需要构建MultipartFile的实例。

private MultipartFile buildMultipartFile() {
    DiskFileItem diskFileItem = new DiskFileItem("file", "text/plain", true, "file", 100, null);
    MultipartFile file = new CommonsMultipartFile(diskFileItem);
    return file;
}

但是我遇到了DiskFileItem对象的问题。当我像这样创建它时,我在NullPointerException对象的getSize()方法中得到DiskFileItemDiskFileItem本身的构造函数具有此参数

String fieldName, 
String contentType, 
boolean isFormField, 
String fileName, 
int sizeThresold, 
File repository

所以问题是 - 如何实例化DiskFileItem还是有另一种方法来处理这种情况?

0 个答案:

没有答案