에러
java.io.FileNotFoundException
JUnit으로 Multipartfile upload 테스트 시에 tmp 폴더에 저장이 안 되는 에러.
원인
public String upload(@RequestParam MultipartFile uploadfile, Model model)
throws IllegalStateException, IOException {
FileDto dto = new FileDto(UUID.randomUUID().toString(), uploadfile.getOriginalFilename(),
uploadfile.getContentType());
File newFileName = new File(dto.getUuid() + "_" + dto.getFileName());
// 물리적 파일로 변환
uploadfile.transferTo(newFileName);
new FileReader(filePath + "/" + dto.getUuid() + "_" + dto.getFileName())
Case1. ) 정상 실행
new File(dto.getUuid() + "_" + dto.getFileName());
이 부분에서 파일이 생성되는데 아래 2군데에 저장이 된다.
ex) 저장 경로
1. workspace/test-project/uuid_test.json
2. C:\Users\홍길동\AppData\Local\Temp\uuid_test.json
그러므로 new FileReader(filePath + "/" + dto.getUuid() + "_" + dto.getFileName())
이 부분에서 file을 찾을 수 있었다. (filePath는 java.io.tmpdir로 선언된 변수)
Case2.) JUnit 테스트
tmp 폴더에는 저장되지 않는다.
ex) 저장 경로
1. workspace/test-project/uuid_test.json
String path = System.getProperty("user.dir");
File file = new File(path+"\\uuid_test.json");
FileInputStream input = new FileInputStream(file);
MockMultipartFile multipartFile = new MockMultipartFile("uploadfile",
file.getName(), "application/json", IOUtils.toByteArray(input));
mockMvc.perform(
MockMvcRequestBuilders.fileUpload("/upload")
.file(multipartFile)
.param("some-random", "4"))
.andExpect(status().is(200))
.andExpect(content().string("success"));
위 소스는 JUnit으로 MockMultipartFile 테스트하는 소스.
해결
File newFileName = new File(filePath + "/" + dto.getUuid() + "_" + dto.getFileName());
File 저장하는 부분을 FileReader와 동일한 경로로 설정해주고 나서 해결됐다.
후기
왜 JUnit으로 테스트 할 때는 tmp 에 저장되지 않는지 정확한 이유를 모르겠다.
아니면 MockMultipartFile로 파일을 넘겨줄 때 잘못된 것인지 나중에 이유를 다시 찾아봐야겠다.
원인을 아시는 분이나 같은 에러를 겪으신 분 있으면 답글 부탁드립니다.
'JAVA > JUnit' 카테고리의 다른 글
[JUnit4][Error] NullPointerException 에러 (0) | 2022.02.19 |
---|---|
[JUnit4][Error] 실행 시 initailizationError 해결 방법 (0) | 2022.02.19 |