Spring 심화 주차 개인 과제 - 테스트코드 : 트러블 슈팅

토리·2025년 2월 27일
0

문제

    @ExtendWith(MockitoExtension.class)
    public class AuthServiceTest {

    @Mock
    private UserRepository userRepository;

    @Autowired
    private PasswordEncoder passwordEncoder;

    @InjectMocks
    private UserService userService;

    @Test
    void 회원가입(){
        // given
        final User newUser = User.builder()
                .email("ijieun@gmail.com")
                .password("Password123@")
                .userRole(UserRole.USER)
                .build();

        // when
        final User savedUser = userRepository.save(newUser);

        // then
        assertThat(savedUser.getEmail()).isEqualTo("ijieun@gmail.com");
        assertThat(savedUser.getPassword()).isEqualTo("Password123@");
        assertThat(savedUser.getUserRole()).isEqualTo(UserRole.USER);
    } 
// when
final User savedUser = userRepository.save(newUser);

savedUser 가 null을 반환함.

원인

Mock 객체는 따로 설정하지 않으면 아무 동작도 하지 않음.
userRepository는 @Mock으로 선언되었기 때문에 실제 save() 메서드가 동작하지 않는다.

해결

when(userRepository.save(any(User.class))).thenReturn(newUser);

userRepository.save(어떤 User 객체든지)가 호출되면 무조건 newUser를 반환하도록 설정하여 해결.

profile
안녕하세요. 토리입니다.

0개의 댓글