Spring,SpringBoot

Test 코드로 인해서 생성되는 파일 관리(자바의 파일 삭제)

Lahezy 2023. 5. 1.
728x90

 

수정 전 코드

    @Test
    public void 유저객체생성확인() throws Exception {
        //이름에 넘길 파라미터 네임
        MockMultipartFile file = new MockMultipartFile("profileImg", "image.jpg", "image/jpeg", "<<jeg data>>".getBytes(StandardCharsets.UTF_8));
        MemberRequestDto userMakeDto = new MemberRequestDto("password", "loginId", "nick", "bo@google.com", file);

        //when
        mockMvc.perform(multipart("/auth/signup")
                        .file(file)
                        .param("password", userMakeDto.getPassword())
                        .param("loginId", userMakeDto.getLoginId())
                        .param("nickname", userMakeDto.getNickname())
                        .param("email", userMakeDto.getEmail())
                )
                .andExpect(status().isOk())
                .andExpect(jsonPath("loginId").value("loginId"))
                .andExpect(jsonPath("nickname").value("nick"))
                .andExpect(jsonPath("email").value("bo@google.com"));
        //then
        Member find = memberService.findByNickname("nick");
        assertTrue(passwordEncoder.matches("password", find.getPassword()));
        assertThat(find.getLoginId()).isEqualTo("loginId");
    }

 

현재 코드에서는 유저의 프로필 이미지 입력을 위한 테스트코드를 위와 같이 작성해 둔 상태이다.

테스트 코드는 잘 동작하는데 파일 자체를 저장하는 방식이라 null인 이미지 파일만 계속 생성되고 있다.

 

수정 후 코드

#application-test.properties 파일 내에 테스트 코드용 별도의 파일 생성 
file.dir=/Users/bagjuhui/IdeaProjects/share-anything/src/test/resources/static/uploads/
@Test
public void 유저객체생성확인() throws Exception {
    //이름에 넘길 파라미터 네임
    MockMultipartFile file = new MockMultipartFile("profileImg", "image.jpg", "image/jpeg", "<<jeg data>>".getBytes(StandardCharsets.UTF_8));
    MemberRequestDto userMakeDto = new MemberRequestDto("password", "loginId", "nick", "bo@google.com", file);

    //when
    mockMvc.perform(multipart("/auth/signup")
                    .file(file)
                    .param("password", userMakeDto.getPassword())
                    .param("loginId", userMakeDto.getLoginId())
                    .param("nickname", userMakeDto.getNickname())
                    .param("email", userMakeDto.getEmail())
            )
            .andExpect(status().isOk())
            .andExpect(jsonPath("loginId").value("loginId"))
            .andExpect(jsonPath("nickname").value("nick"))
            .andExpect(jsonPath("email").value("bo@google.com"));
    //then
    Member find = memberService.findByNickname("nick");
    assertTrue(passwordEncoder.matches("password", find.getPassword()));
    assertThat(find.getLoginId()).isEqualTo("loginId");

    cleanUp();
}

//@AfterEach (해당 클래스 내의 모든 테스트 코드마무리 시에 동작하길 원한다면)
public void cleanUp() {
    String filePath = "/Users/bagjuhui/IdeaProjects/share-anything/src/test/resources/static/uploads//";
    deleteFolder(filePath);
}

public static void deleteFolder(String path) {
    File folder = new File(path);
    try {
        if (folder.exists()) {
            File[] folder_list = folder.listFiles(); //파일리스트

            for (int i = 0; i < folder_list.length; i++) {
                if (folder_list[i].isFile()) {
                    folder_list[i].delete();
                }
            }
        }
    } catch (Exception e) {
        e.getStackTrace();
    }
}

테스트 코드의 파일 저장위치를 분리하고 위와 같이 유저 객체 생성 메서드 실행 후에  파일을 삭제하도록 수정하였다. 

 

https://coding-factory.tistory.com/284

GitHub : https://github.com/juhee77/share-anything

728x90

댓글