AuthServiceTest의 testLogin 메소드 실행 중
java.lang.RuntimeException: 토큰 생성 중 오류가 발생했습니다.라는 예외가 발생
원인 분석:
AuthService의 login 메소드에서 jwtTokenProvider.createToken(email, roles)를 호출하는 부분에서 NullPointerExceptionAuthService 클래스를 살펴보면, jwtTokenProvider 필드가 선언되어 있으나, 생성자를 통해 주입받아 초기화하는 코드가 누락// AuthService.java 일부
private final UserRepository userRepository;
private final PasswordEncoder passwordEncoder;
private JwtTokenProvider jwtTokenProvider; // 초기화 누락
public AuthService(UserRepository userRepository,
PasswordEncoder passwordEncoder) { // JwtTokenProvider 주입 누락
this.userRepository = userRepository;
this.passwordEncoder = passwordEncoder;
// this.jwtTokenProvider = jwtTokenProvider; // 해당 코드 없음
}
login 메소드 내에서 jwtTokenProvider는 null 상태였고, jwtTokenProvider.createToken(...) 호출 시 NullPointerException이 발생
제공된 해결책:
AuthService의 생성자에 JwtTokenProvider를 파라미터로 추가jwtTokenProvider 필드를 초기화하도록 코드를 수정final 키워드를 jwtTokenProvider 필드에 추가하여 불변성을 확보// AuthService.java 일부 수정된 내용
@Service
public class AuthService implements UserDetailsService {
private final UserRepository userRepository;
private final PasswordEncoder passwordEncoder;
private final JwtTokenProvider jwtTokenProvider; // final 추가
// 생성자에서 JwtTokenProvider 주입받도록 수정
public AuthService(UserRepository userRepository,
PasswordEncoder passwordEncoder,
JwtTokenProvider jwtTokenProvider) { // JwtTokenProvider 파라미터 추가
this.userRepository = userRepository;
this.passwordEncoder = passwordEncoder;
this.jwtTokenProvider = jwtTokenProvider; // jwtTokenProvider 초기화
}
// ... (login 메소드 내부는 변경 없음, jwtTokenProvider가 정상적으로 주입되면 문제 해결)
}