728x90
320x100
🎯 오늘의 목표
- 회원(User) 도메인 단위테스트
⚙️ 진행한 작업
- 회원(User) 도메인 단위테스트
- 회원가입 성공
- 로그인 실패
- 회원정보수정
🛠️ 개발내용
📌 UserServiceTest
package ddururi.bookbookclub.domain.user.service;
import ddururi.bookbookclub.domain.user.dto.*;
import ddururi.bookbookclub.domain.user.entity.User;
import ddururi.bookbookclub.domain.user.repository.UserRepository;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.*;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import java.util.Optional;
import static org.assertj.core.api.Assertions.*;
import static org.mockito.Mockito.*;
class UserServiceTest {
@InjectMocks
private UserService userService;
@Mock
private UserRepository userRepository;
@Mock
private BCryptPasswordEncoder passwordEncoder;
@BeforeEach
void setUp() {
MockitoAnnotations.openMocks(this);
}
@Test
void 회원가입_성공() {
// given
UserSignupRequest request = new UserSignupRequest("test@example.com", "pw1234", "닉네임");
when(userRepository.existsByEmail(request.getEmail())).thenReturn(false);
when(passwordEncoder.encode(request.getPassword())).thenReturn("hashedPW");
User savedUser = User.create(request.getEmail(), "hasedPw", request.getNickname());
when(userRepository.save(any(User.class))).thenReturn(savedUser);
// when
UserResponse response = userService.signup(request);
// then
assertThat(response.getEmail()).isEqualTo("test@example.com");
assertThat(response.getNickname()).isEqualTo("닉네임");
verify(userRepository).save(any(User.class));
}
@Test
void 로그인_실패_비밀번호불일치() {
// given
String email = "user@email.com";
String rawPassword = "wrongPW";
User user = User.create(email, "hashedPassword", "닉네임");
when(userRepository.findByEmail(email)).thenReturn(Optional.of(user));
when(passwordEncoder.matches(rawPassword, "hashedPassword")).thenReturn(false);
// when & then
assertThatThrownBy(() -> userService.login(new UserLoginRequest(email, rawPassword)))
.isInstanceOf(IllegalArgumentException.class)
.hasMessage("비밀번호가 일치하지 않습니다.");
}
@Test
void 회원정보수정_성공() {
// given
Long userId = 1L;
User user = User.create("user@email.com", "hashedPassword", "이전닉네임");
user.setBio("이전 소개");
when(userRepository.findById(userId)).thenReturn(Optional.of(user));
UserUpdateRequest request = new UserUpdateRequest("새닉네임", "새 소개");
// when
userService.updateProfile(userId, request);
// then
assertThat(user.getNickname()).isEqualTo("새닉네임");
assertThat(user.getBio()).isEqualTo("새 소개");
}
}
📌 단위 테스트는 왜 서비스 중심으로 하나요?
[Spring] 단위 테스트에서 서비스 중심? 레파지토리 중심?
단위 테스트를 하다가 보니 문득 떠오른 궁금증이나, 이유를 정확히 몰랐던 것들 정리! 📌 단위 테스트를 할 때, 서비스 단을 테스트해야 하나요? 아니면 레포지토리를 테스트해야 하나요?“단
ddururiiiiiii.tistory.com
728x90
320x100
'💻 뚝딱뚝딱 > 북북클럽' 카테고리의 다른 글
[개발일지 #005] 로그인 구현 (Feat.JWT 기반 인증) (0) | 2025.04.22 |
---|---|
[개발일지 #004] 회원 정보 수정 API 구현 (0) | 2025.04.22 |
[개발일지 #003] 회원(User) 도메인 회원가입 API 구현 및 테스트 (0) | 2025.04.22 |
[개발일지#001] 회원 도메인(User) 개발 (0) | 2025.04.18 |
[개발일지#000] 프로젝트 생성 (프로젝트 생성, MySQL 연결, 개발 편의 설정, 패키지 설정 등) (0) | 2025.04.16 |