Java 如何在Spring中用Mock编写commonmultipartfile的单元测试
我正在使用Spring3.0org.springframework.web.multipart.commons.commons多部分文件上传文件。我想写下使用Mockito上传文件的单元测试用例 下面是我的控制器类Java 如何在Spring中用Mock编写commonmultipartfile的单元测试,java,spring,unit-testing,spring-mvc,mocking,Java,Spring,Unit Testing,Spring Mvc,Mocking,我正在使用Spring3.0org.springframework.web.multipart.commons.commons多部分文件上传文件。我想写下使用Mockito上传文件的单元测试用例 下面是我的控制器类 private RegistrationService registrationService; @RequestMapping(method = RequestMethod.POST) public String create(Registration registrat
private RegistrationService registrationService;
@RequestMapping(method = RequestMethod.POST)
public String create(Registration registration, BindingResult result,ModelMap model)
throws NumberFormatException, Exception {
File uploadedFile = uploadFile(registration);
List<Registration> userDetails = new ArrayList<Registration>();
processUploadedFile(uploadedFile,userDetails);
model.addAttribute("userDetails", userDetails);
return "Registration";
}
private File uploadFile(Registration registration) {
Date dt = new Date();
SimpleDateFormat format = new SimpleDateFormat("MM_dd_yyyy_HH_mm_ss");
File uploadedFile = new File(uploadFileLocation
+ registration.getFileData().getOriginalFilename() + "."
+ format.format(dt));
try {
registration.getFileData().transferTo(uploadedFile);
} catch (IllegalStateException e) {
logger.error("Error occurred while uploading file", e);
} catch (IOException e) {
logger.error("Error occurred while uploading file", e);
}
return uploadedFile;
}
private void processUploadedFile(File uploadedFile, List<Registration> userDetails)
throws NumberFormatException, Exception {
registrationService.processFile(uploadedFile, userDetails);
}
我的服务类方法
public void processFile(File uploadedFile,
List<Registration> userDetails) throws NumberFormatException,
Exception {
String record = "";
try {
FileWriter fstream = new FileWriter(outputFileLocation
+ uploadedFile.getName());
BufferedWriter out = new BufferedWriter(fstream);
BufferedReader br = new BufferedReader(new FileReader(
uploadedFile.getAbsolutePath()));
while ((record = br.readLine()) != null) {
String[] requesterUser = record.split(",");
if (insertUserToDB(requesterUser, userDetails) > 0)
out.write(record + ", Yes");
else
out.write(record + ", No");
out.newLine();
}
out.flush();
out.close();
} catch (FileNotFoundException e) {
logger.error("Error occured while processing file", e);
} catch (IOException e) {
logger.error("Error occured while processing file", e);
}
}
我是朱尼特和莫基托的新手。任何帮助或指针都很欣赏。 您可能想考虑使用Spring的模拟实现(),而不是使用MOCKITO创建模拟。 < P> Heinrich Filter是正确的,但是您还需要将字段
fileData
的类型从commonmulitpartfile
更改为org.springframework.web.multipart.MultipartFile
。(这是上面的超级接口commonmulitpartfile
和MockMultipartFile
)
如果您已经这样做了,那么您可以使用spring提供的mock对象来创建多部分文件的mock
MockMultipartFile mockMultipartFile = new MockMultipartFile(
"fileData",
fileName,
"text/plain",
content);
我使用org.springframework.web.multipart.MultipartFile写下了测试方法,但对于MultipartFile,它返回空值。我想,这是因为您没有在MockMultipartFile对象中放入任何内容(请参见我回答中的示例)。顺便说一句:测试中的强制转换是不需要的!
@Test
public void testProcessFile() {
private static final String TEST_FILE = "c:\\user.csv";
MockMultipartHttpServletRequest request = new MockMultipartHttpServletRequest();
MockMultipartHttpServletRequest mockMultipartHttpServletRequest = (MockMultipartHttpServletRequest)request;
MultipartFile multipartFile = (MultipartFile) mockMultipartHttpServletRequest.getFile(TEST_FILE);
Registration registration=new Registration();
registration.setFileData(multipartFile);
RegistrationService.processFile(uploadedFile, userDetails);
}
MockMultipartFile mockMultipartFile = new MockMultipartFile(
"fileData",
fileName,
"text/plain",
content);