Hyeok의 웹 개발 블로그

<2025.05.08> TestCode - 단위 테스트 본문

TIL/Spring

<2025.05.08> TestCode - 단위 테스트

Yhyeok 2025. 5. 8. 20:28

✅단위 테스트

  • 작은 코드 조각을 검증
  • 빠르게 수행
  • 격리된 방식으로 처리하는 자동화된 테스트

👍좋은 테스트

  • 도메인 모델 및 알고리즘 ( Entity, Utill 클래스)
    - 노력 대비 단위 테스트의 가치가 매우 높다.
    - 해당 코드가 복잡하거나 중요한 로직을 수행해서 테스트의 회귀 방지 향상
    - 외부 의존성이 없어서 테스트 유지비를 낮추기 때문에 저렴

👎 나쁜 테스트

  • 간단한 코드 (간단한 DTO, Utill) , @Getter, @Setter, @Builder 등등
    - 이러한 테스트는 가치가 없어서 할 필요 X
  • 컨트롤러 - 엔드투 엔트 테스트가 적합- 단위 테스트를 적용 X

 

더보기

좋은 단위 테스트의 4가지 특성
1. 회귀 방지 -> 기능 오류를 방지

2. 리팩토링 내성 -> 리팩토링을 해도 테스트가 깨지지 않음

3. 빠른 피드백 -> 빠른 테스트 속도

4. 유지 보수성 -> 가독성과 재사용성이 좋고 실행되기 쉽게 작성되어야함.


✅ 빠른 피드백 

  • 의존성이 없는 코드에 대한 테스트 작성 (POJO 테스트)
    - Entity, Utill 클래스
  • 의존성을 mock 처리하여 핵심 비즈니스 로직에 대한 테스트 코드만을 작성
    - 복잡한 비즈니스 로직이 포함된 Service 클래스 

✅ Mock

 

  • Mock은 테스트 할 때, 필요한 실제 객체와 동일한 모의 객체를 만들어 테스트의 효율성을 높이기 위해 사용하는 '가짜 객체'

- 사용 하는 경우

  •  실제 객체를 만들기엔 시간과 비용이 많이 드는 경우
  • 의존성이 길게 걸쳐져있어서 테스트를 제대로 구현하기 어려운 경우
  • 테스트 작성을 위한 환경 구축이 어려운 경우

- 종류 및 사용 방법

  • @Mock : 특정 클래스 위에 선언하면, 해당 클래스를 가짜 객체로 만듬
  • @InjectMocks : @Mock 으로 생성된 mock 객체를 자동으로 DI 해주는 어노테이션
@ExtendWith(MockitoExtension.class) // Mock Application Context Load
public class OrderServiceTest {

    @Mock
    private OrderRepository orderRepository;
    @Mock
    private ProductRepository productRepository;
    @Mock
    private OrderLineRepository orderLineRepository;

    @InjectMocks
    private OrderService orderService;
 
 
    @Test
		void test() {
			...
		}
}

 

'TIL > Spring' 카테고리의 다른 글

<2025.06.04> 임베딩  (0) 2025.06.04
<2025.05.19> 페이지네이션, 무한스크롤  (0) 2025.05.19
<2025.05.07> 연관관계 N+1  (0) 2025.05.07
<2025.05.01> 영속성 컨텍스트  (2) 2025.05.01
<2025.04.22> 배달 기능 프로젝트 피드백  (1) 2025.04.22