728x90
320x100
단위 테스트를 하다가 보니 문득 떠오른 궁금증이나, 이유를 정확히 몰랐던 것들 정리!
📌 단위 테스트를 할 때, 서비스 단을 테스트해야 하나요? 아니면 레포지토리를 테스트해야 하나요?
“단위 테스트는 보통 서비스(Service)를 중심으로 작성한다.”
👉 그리고 레포지토리는 “통합 테스트”나 “쿼리 테스트”로 따로 작성하는 경우가 많음.
📌 왜 서비스 기반 단위 테스트를 중심으로 하냐면?
이유 | 설명 |
비즈니스 로직 단위 테스트 | 대부분의 핵심 로직은 Service에 존재함 (가입 조건, 로그인 인증, 포인트 지급 등) |
Mock으로 외부 의존 제거 | Repository, EmailSender 등은 목처리하고 Service의 흐름만 검증 가능 |
빠르고 안정적 | DB 없이도 로직 테스트 가능 → 빠른 단위 테스트 수행 |
📌 Repository는 어떻게 테스트하냐면?
방식 | 설명 |
통합 테스트 (@DataJpaTest) | 실제 DB(H2 등)에 연결해서 쿼리 실행, 저장/조회/정렬/조건 등 확인 |
QueryDSL, 복잡한 where 조건 | 쿼리 결과를 정확히 테스트하기 위해 Repository만 따로 검증 |
✅ 실무에서 테스트 구조 예시
대상 | 테스트 종류 | 예시 |
UserService | ✅ 단위 테스트 (Mock Repository) | 회원가입, 로그인, 수정 등 로직 검증 |
UserRepository | ✅ 통합 테스트 (@DataJpaTest) | findByEmail, existsByStatus, 조건 검색 등 |
PostService | ✅ 단위 테스트 (Mock PostRepository) | 게시글 작성, 수정, 알림 트리거 등 |
PostRepository | ✅ 통합 테스트 | 태그 포함 검색, 정렬 테스트 등 |
🧠 정리
구분 | 보편적 기준 |
단위 테스트 | 👉 Service 중심, Mock으로 의존 제거 |
Repository 테스트 | 👉 통합 테스트 (@DataJpaTest) 또는 Query 테스트용으로 별도 작성 |
728x90
320x100
'💻 하나씩 차곡차곡 > Back-end' 카테고리의 다른 글
[스프링 시큐리티] 비밀번호 암호화 하기 (BCryptPasswordEncoder) (0) | 2025.04.22 |
---|---|
[스프링 시큐리티] 서버 기반 인증 VS 토큰 기반 인증 (Session, JWT 등) (0) | 2025.04.21 |
[Spring JPA]JPA Repository란? (정의, 구조, 사용하는 이유, 사용법 등) (0) | 2025.04.18 |
[Spring Security] BCryptPasswordEncoder란? (정의, 사용하는 이유, 사용법 등) (0) | 2025.04.18 |
[Spring/JPA] Auditing 기능이란? (정의, 사용법, 사용하는 이유 등) (0) | 2025.04.18 |