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 등으로 중간값을 찍으며 원인 추적하는 과정이 중요
- 테스트 목적(단위/통합)에 따라 테스트 방식/코드 작성법이 달라진다
'Archive > 예전 TIL' 카테고리의 다른 글
| [트러블슈팅] PasswordEncoder 등 빈 주입 오류, 컴포넌트 스캔 누락 (2) | 2025.07.23 |
|---|---|
| [트러블슈팅] 윈도우 한글 경로(ClassNotFoundException)로 인한 자바/테스트 에러 (2) | 2025.07.08 |
| [트러블슈팅] FK 무결성 오류와 로그인 미구현 상태에서 user_id 입력 문제 (0) | 2025.07.02 |
| [트러블슈팅] @Controller vs @RestController, 404 에러 & 정상 동작 차이 (0) | 2025.06.28 |
| [트러블슈팅] MyBatis Mapper가 Bean으로 등록되지 않는 런타임 에러 해결 (0) | 2025.06.28 |