728x90
프로필 수정 API를 구현한 뒤 서비스단의 테스트 코드를 작성하는 과정에서 매개변수로 MultipartFile 타입을 받아야 했다.
MultipartFile 타입의 매개변수를 가지고 테스트 코드를 작성하는 것이 처음이었기 때문에 이번 기회에 정리해두려고 한다.
테스트 대상: Service의 updateProfile()
@Override
public UserUpdateProfileRes updateProfile(UserUpdateProfileReq req, MultipartFile multipartFile) {
UserValidator.validate(req);
User savedUser = getUser(req.getUserId());
String imageUrl = savedUser.getProfileImageUrl();
if (!imageUrl.equals(DEFAULT_PROFILE_IMAGE_URL)) {
s3Util.deleteFile(imageUrl, FilePath.PROFILE);
}
if (multipartFile.isEmpty()) {
imageUrl = DEFAULT_PROFILE_IMAGE_URL;
} else {
S3Validator.isProfileImageFile(multipartFile);
imageUrl = s3Util.uploadFile(multipartFile, FilePath.PROFILE);
}
userRepository.save(
User.builder()
.userId(savedUser.getUserId())
.username(req.getUsername())
.password(passwordEncoder.encode(req.getPassword()))
.email(savedUser.getEmail())
.introduce(req.getIntroduce())
.profileImageUrl(imageUrl)
.provider(savedUser.getProvider())
.role(savedUser.getRole())
.build());
return new UserUpdateProfileRes();
}
테스트 코드: updateProfileTest
- 이미지 준비
- resources > images > 테스트에 사용할 이미지 파일 저장
- ClassPathResource("이미지 경로")를 이용해 경로에 있는 이미지 파일을 읽어올 수 있다.
- MockMultipartFile("controller에서 MultipartFile을 받을 때의 name", "파일 이름", "파일 타입", InputStream)
- 이렇게 생성한 multipartFile을 req와 함께 service에 넘겨준다.
@Test
@DisplayName("프로필 수정")
void updateProfileTest() throws IOException {
// given
UserUpdateProfileReq req =
UserUpdateProfileReq.builder()
.userId(TEST_USER_ID)
.username(TEST_ANOTHER_USER_NAME)
.password(TEST_ANOTHER_USER_PASSWORD)
.introduce(TEST_ANOTHER_USER_INTRODUCE)
.build();
String imageUrl = "images/image1.jpg";
Resource fileResource = new ClassPathResource(imageUrl);
MultipartFile multipartFile =
new MockMultipartFile(
"image", fileResource.getFilename(), "image/jpeg", fileResource.getInputStream());
// 이하 생략
}
'TIL' 카테고리의 다른 글
[240103] 심화 주차 KPT회고 (0) | 2024.01.03 |
---|---|
[240103] 심화 프로젝트 마무리 :: 컨벤션 (0) | 2024.01.03 |
[231227] 이메일 인증 구현 (링크 방식) (0) | 2023.12.27 |
[231221] update 시 Timestamp 값으로 null이 반환 (0) | 2023.12.21 |
[231219] QueryDSL, JPQL (0) | 2023.12.19 |