gpt4 book ai didi

java - 如何在 Spring 中使用 Mock 为 CommonsMultipartFile 编写单元测试

转载 作者:行者123 更新时间:2023-12-03 18:36:50 25 4
gpt4 key购买 nike

我正在使用 spring 3.0 org.springframework.web.multipart.commons.CommonsMultipartFile 进行文件上传。我想写下使用 Mockito 上传文件的单元测试用例。
以下是我的 Controller 类

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 class Registration {
private String name;
private CommonsMultipartFile fileData;


public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public CommonsMultipartFile getFileData() {
return fileData;
}

public void setFileData(CommonsMultipartFile fileData) {
this.fileData = fileData;
}
}
我的服务类方法
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);
}


}
如何对其进行单元测试?我是 Mockito 的新手。
编辑
我已经写下了测试上述代码的测试方法,但它为 multipartFile 返回 null。我应该如何测试上述服务类 processFile 方法?
@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);
}
我是 JUnit 和 mockito 的新手。任何帮助或指针真的很感激。

最佳答案

您可能需要考虑使用 Spring 的 Mock 实现 ( org.springframework.mock.web.MockMultipartFile ) 而不是使用 Mockito 创建模拟。

关于java - 如何在 Spring 中使用 Mock 为 CommonsMultipartFile 编写单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8799378/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com