Java 如何编写mockito测试用例来上传文件,如下面给定的控制器所示?
这是我的应用程序.properties文件Java 如何编写mockito测试用例来上传文件,如下面给定的控制器所示?,java,unit-testing,spring-boot,mockito,Java,Unit Testing,Spring Boot,Mockito,这是我的应用程序.properties文件 @RestController @ComponentScan public class FileUploadController { @Autowired Environment env; private static final Logger logger = LoggerFactory .getLogger(FileUploadController.class); /** *
@RestController
@ComponentScan
public class FileUploadController {
@Autowired
Environment env;
private static final Logger logger = LoggerFactory
.getLogger(FileUploadController.class);
/**
* Upload single file using Spring Controller
*/
@RequestMapping(value = "/{name}", method = RequestMethod.POST)
public String fileUpload(@RequestParam("file") MultipartFile file,
@PathVariable("name") String name) throws Exception {
System.out.println(file);
System.out.println(name);
if (!file.isEmpty()) {
try {
byte[] bytes = file.getBytes();
// Creating the directory to store file
Path path = Paths.get(env.getProperty("upload.dir.location"));
// Create the file on server
File serverFile = new File(path + "/" +name);
BufferedOutputStream stream = new BufferedOutputStream(
new FileOutputStream(serverFile));
stream.write(bytes);
stream.close();
logger.info("Server File Location="
+ serverFile.getAbsolutePath());
return "You successfully uploaded file=" + name;
} catch (Exception e) {
return "You failed to upload " + name + " => " + e.getMessage();
}
} else {
return "You failed to upload " + name
+ " because the file was empty.";
}
}
}
我需要一个JUnit或Mockito(最好)测试用例来测试这段代码。我尝试过几种格式,但到目前为止还没有找到完美的。有人能建议我写单元测试用例来上传文件吗?
提前谢谢
编辑-1
这是我的测试课:
server.port=8082
spring.http.multipart.max-file-size=10MB
spring.http.multipart.max-request-size=10MB
upload.dir.location=/home/user/Desktop/UploadedFiles/
还是说,,
java.lang.AssertionError:状态应为:但为:
对于这两个测试用例。使用JUnit,您可以在方法运行后验证文件是否存在
@WebAppConfiguration
public class RestapiFileUploadControllerTest extends RestapiFileuploadApplicationTests{
private MockMvc mvc;
@Autowired
private WebApplicationContext webApplicationContext;
@Autowired
Environment env;
@Test
public void testUploadedFile() throws Exception{
File f = new File("/home/user/Documents/response.pdf");
System.out.println(f.isFile()+" "+f.getName()+" "+f.exists());
FileInputStream fi1 = new FileInputStream(f);
FileInputStream fi2 = new FileInputStream(new File("/home/user/Desktop/UploadedFiles/response"));
MockMultipartFile fstmp = new MockMultipartFile("upload", f.getName(), "multipart/form-data",fi1);
MockMultipartFile secmp = new MockMultipartFile("upload", "response.pdf","application/pdf",fi2);
MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
mockMvc.perform(MockMvcRequestBuilders.fileUpload("/response")
.file(fstmp)
.file(secmp))
.andExpect(status().isOk());
}
@Test
public void test1() throws Exception {
MockMultipartFile firstFile = new MockMultipartFile("pdf", "response.pdf", "multipart/form-data", "data".getBytes());
Path path = Paths.get(env.getProperty("upload.dir.location"));
MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
mockMvc.perform(MockMvcRequestBuilders.fileUpload("/response", path)
.file(firstFile)
.param("some-random", "4"))
.andExpect(status().isOk());
}
}
使用JUnit,您可以在方法运行后验证文件是否存在
@WebAppConfiguration
public class RestapiFileUploadControllerTest extends RestapiFileuploadApplicationTests{
private MockMvc mvc;
@Autowired
private WebApplicationContext webApplicationContext;
@Autowired
Environment env;
@Test
public void testUploadedFile() throws Exception{
File f = new File("/home/user/Documents/response.pdf");
System.out.println(f.isFile()+" "+f.getName()+" "+f.exists());
FileInputStream fi1 = new FileInputStream(f);
FileInputStream fi2 = new FileInputStream(new File("/home/user/Desktop/UploadedFiles/response"));
MockMultipartFile fstmp = new MockMultipartFile("upload", f.getName(), "multipart/form-data",fi1);
MockMultipartFile secmp = new MockMultipartFile("upload", "response.pdf","application/pdf",fi2);
MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
mockMvc.perform(MockMvcRequestBuilders.fileUpload("/response")
.file(fstmp)
.file(secmp))
.andExpect(status().isOk());
}
@Test
public void test1() throws Exception {
MockMultipartFile firstFile = new MockMultipartFile("pdf", "response.pdf", "multipart/form-data", "data".getBytes());
Path path = Paths.get(env.getProperty("upload.dir.location"));
MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
mockMvc.perform(MockMvcRequestBuilders.fileUpload("/response", path)
.file(firstFile)
.param("some-random", "4"))
.andExpect(status().isOk());
}
}
“我需要一个”。。关键是你开始写一个,当你被困在某个地方时,我们会帮助你。我们不会为您编写定制的单元测试。此链接可以帮助您。是的,我已经写了一件事。但是,他犹豫是否将该文件包括在内。给我一点时间,我会加上一些澄清,“我需要一个”。。关键是你开始写一个,当你被困在某个地方时,我们会帮助你。我们不会为您编写定制的单元测试。此链接可以帮助您。是的,我已经写了一件事。但是,他犹豫是否将该文件包括在内。给我一点时间,我会补充一些澄清。不,这不起作用。我需要添加BuildTestFile()方法和ExportFileToDisk类,对吗?我需要包括什么?我给你一个大纲,让你有一个有效的单元测试来检查一个文件是否被输出。在我上面的评论下面的3行中,你需要调用输出文件的方法。不,这不起作用。我需要添加BuildTestFile()方法和ExportFileToDisk类,对吗?我需要包括什么?我给你一个大纲,让你有一个有效的单元测试来检查一个文件是否被输出。在上面我的评论下面的3行中,您需要调用输出文件的方法。