코드 그라데이션
20230210 테스트 코드 추가 설명 (3) 프로필 정보 조회 성공 테스트 본문
UserService
public interface UserService {
ProfileResponseDto showProfile(Long profileId);
}
UserServiceImpl
@Service
@RequiredArgsConstructor
public class UserServiceImpl implements UserService { // UserServiceImpl로 수정 부탁드립니다.
private final UserRepository userRepository;
private final JwtUtil jwtUtil;
private final PasswordEncoder passwordEncoder;
@Override
public ProfileResponseDto showProfile(Long userId) {
Profile profile = userRepository.findById(userId)
.orElseThrow(() -> new IllegalArgumentException("회원 없음")).getProfile();
return new ProfileResponseDto(profile);
}
}
다시 회원정보 업데이트 성공 테스트 코드 그대로 가져와서 틀을 따보자
@ExtendWith(MockitoExtension.class)
class UserServiceImplTest {
@Mock
UserRepository userRepository;
@InjectMocks
UserServiceImple userService;
@Test
@DisplayName("회원정보 업데이트 성공 테스트")
void updateProfile() {
//given
Long userId = 1L; // 데이터베이스에 저장되어 있는 사용자의 primary key
// User user = new User("testuser", "1234", "01012345678", "서울"); 이게 아니고,
// 데이터베이스에 저장되어 있는 사용자의 역할
User user = new User("testUser", "1234", new Profile("banana", "before"));
// 업데이트할 프로필의 정보 : 업데이트가 제대로 일어났다면 실행했을 때 닉네임과 imgurl이 바뀌어 있겠지
ProfileRequestDto requestDto = ProfileRequestDto.builder().nickName("Apple").img_url("after").build();
given(userRepository.findById(userId).willReturn(Optional.of(user));
//when
// 이거 삭제 userService.updateProfile(userId, requestDto);
Profile updatedProfile = userService.updateProfile(userId, requestDto);
// 이렇게 되면 우리가 업데이트된 프로필 정보를 받아서 확인할 수 있게 된다.
//then
Profile updatedProfile = user.getProfile();
assertThat(updatedProfile.getNickname()).isEqualTo(requestDto.getNickname());
assertThat(updatedProfile.getImg_url()).isEqualTo(requestDto.getImg_url());
}
}
한땀 한땀 받아적으면서 다시 틀 짜보기
JPA는 데이터베이스에 Primary Key만 있으면, 해당 row를 특정할 수가 있잖아요.
(우리가 주민등록번호 알면 사람을 특정할 수 있는 것처럼)
그럼 바꾸는 것도 아니고 조회만 하는 것이기 때문에 아이디만 가져오면 되고,
// 업데이트할 사용자의 프로필 정보 부분이 필요가 없다.
그런데 얘도 결국 데이터베이스에 저장된 값을 가져오는 메서드이기 때문에
// 데이터베이스에 저장되어 있는 사용자 역할 부분 은 필요하다!
그리고 얘 역시 findById를 사용하니까
given(userRepository.findById(userId).willReturn(Optional.of(user)); 이 부분도 그대로 살려둔다.
업데이트처럼 뭔가 수정을 위한 복잡한 코드가 필요한 것이 아니라, 그냥 단순히 이 값이 ProfileResponseDto에 잘 갔는지만 확인하면 된다.
newNickname을 그냥 nickName으로 리펙토링하자. 헷갈리잖아.
그리고 이 responseDto.getNickname()이 데이터베이스에서 그대로 가져오는 값과 같으면 되니까(요청한 값 아님)
user닉네임과 같으면 되겠죠. img_url도 마찬가지
@ExtendWith(MockitoExtension.class)
class UserServiceImplTest {
@Mock
UserRepository userRepository;
@InjectMocks
UserServiceImple userService;
@Test
@DisplayName("회원정보 조회 성공 테스트")
void showProfile() {
//given
Long userId = 1L; // 데이터베이스에 저장되어 있는 사용자의 primary key
// 데이터베이스에 저장되어 있는 사용자의 역할
User user = new User("testUser", "1234", new Profile("banana", "before"));
given(userRepository.findById(userId).willReturn(Optional.of(user));
//when
ProfileResponseDto responseDto = userService.showProfile(userId);
//then
assertThat(responseDto.getNickname()).isEqualTo(user.getProfile().getNickname());
assertThat(responseDto.getImg_url()).isEqualTo(requestDto.getProfile().getImg_url());
}
}
728x90
'Spring > Test Code' 카테고리의 다른 글
230217 BoardServiceImpl 테스트 코드 (1) 게시글 생성 - 비교 (0) | 2023.02.26 |
---|---|
230217 Service단 TestCode 전후 비교 (0) | 2023.02.26 |
20230210 테스트 코드 추가 설명 (4) 프로필 정보 조회 실패 테스트 (0) | 2023.02.16 |
20230210 테스트 코드 추가 설명 (2) 회원 정보 업데이트 실패 테스트 (0) | 2023.02.15 |
20230210 테스트 코드 추가 설명 (1) 회원 정보 업데이트 성공 테스트 (0) | 2023.02.15 |
Comments