Archive/예전 TIL

[트러블슈팅] Spring 단위 테스트 실패

khu2172 2025. 7. 10. 15:06

1. 문제 상황

  • 회원(유저) 서비스의 단위 테스트 코드가
    NullPointerException이나
    IllegalStateException("id를 찾지 못함")
    각종 에러로 실패.
  • 테스트 흐름:
    회원가입 → 전체 유저 목록에서 id 찾기 → 단건 조회/삭제 검증

2. 증상/에러 메시지

  • 가입 후 전체 유저: 0
  • 찾은 id: null
  • id를 찾지 못함 예외
  • NullPointerException: ... because "user" is null

3. 원인 분석

  • Mock 환경에선 실제 DB 저장/조회가 발생하지 않음.
    → 단순히 메소드 호출만 검증하는 구조라
    가짜 데이터의 반환값을 직접 세팅하지 않으면
    항상 빈 값(0개)만 반환.
  • 테스트 코드에서 반환값 세팅을 생략해서,
    전체 유저 목록이 항상 0명 → id 찾지 못함.
  • 엔터티 클래스에 테스트용 생성자(id 포함) 누락
    → 원하는 테스트 데이터를 만들지 못함.

4. 해결 방법

  • Mock 객체의 리턴값을 명확히 지정
    (테스트용 데이터는 직접 만들어서 사용)
  • 엔터티/DTO 클래스에 id까지 포함한 생성자를 추가
  • 테스트 흐름/방식(단위테스트 vs 통합테스트) 구분 명확히 하기

5. 배운 점

  • Mock 기반 단위 테스트에선 실제 DB와는 다르게 동작한다는 사실을 인지해야 함
  • 모든 테스트 데이터는 직접 세팅해줘야 한다
  • 에러 로그, println 등으로 중간값을 찍으며 원인 추적하는 과정이 중요
  • 테스트 목적(단위/통합)에 따라 테스트 방식/코드 작성법이 달라진다