테스트코드 작성에 사용되는 메서드 및 애노테이션(1)

2024. 9. 23. 21:23·Java & Spring/Spring

1.  @Mock

  • 역할: 실제 객체의 **모의 객체(Mock Object)**를 생성합니다. 모의 객체는 실제 동작을 하지 않고, 정의한 대로 동작하도록 설정할 수 있습니다.
  • 사용 목적: 외부 의존성을 실제로 동작하지 않게 하고, 테스트하고자 하는 클래스의 동작만 확인할 수 있도록 하기 위해 사용합니다.
  • 예를 들어, 데이터베이스 호출이나 외부 서비스 호출을 모킹하여 테스트의 속도를 높이고, 외부 의존성 없이 순수하게 비즈니스 로직만을 테스트할 수 있습니다.

 

2.  @InjectMocks

  • 역할: @Mock으로 생성된 모의 객체를 해당 클래스의 의존성으로 주입합니다. 즉, 테스트할 클래스의 인스턴스를 생성하고, 이 클래스가 의존하는 다른 객체를 모킹된 객체로 자동으로 주입해줍니다.
  • 사용 목적: 테스트하려는 클래스의 의존성(예: 서비스 클래스가 의존하는 리포지토리)을 모의 객체로 주입하여, 테스트 대상 클래스의 비즈니스 로직을 테스트할 때 사용합니다.

 

3. ArgumentCaptor<T>  entityCaptor = forClass(Entity.class);

     verify(검증하려는 객체,  times(n)).method(entityCaptor.capture());

ArgumentCaptor<Menu> menuCaptor = forClass(Menu.class);
verify(menuRepository, times(1)).save(menuCaptor.capture());
  • ArgumentCaptor는 Mockito에서 제공하는 기능으로, 메서드 호출 시 전달된 인자(객체)를 캡처하여 이를 나중에 검증할 수 있도록 해준다.
    • 즉, menuRepository.save() 메서드가 호출될 때 전달된 Menu 객체를 캡처해서, 그 객체의 상태(필드값)를 테스트에서 검증할 수 있다.
    • 여기서 forClass(Menu.class)는 Menu 클래스 타입의 인자를 캡처하기 위해 ArgumentCaptor를 생성하는 것이다.
  • verify는 Mockito에서 특정 메서드가 지정된 조건에 맞게 호출되었는지를 검증하는 기능이다.
    • 이 예시에서는 menuRepository.save()가 정확히 n번 호출되었는지 확인한다.
    • times(1)은 save 메서드가 한 번 호출되었음을 의미하며, 여러 번 호출되거나 호출되지 않았으면 테스트는 실패하게 된다.
    • menuCaptor.capture(): capture()는 ArgumentCaptor가 지정된 메서드의 인자를 캡처하는 메서드, verify가 menuRepository.save()가 호출되었는지 확인하면서, save() 메서드에 전달된 Menu 객체를 캡처

 

4. ReflectionTestUtils.setField(object, fieldName, value);

  • object: 필드를 설정할 대상 객체
  • fieldName: 설정할 필드의 이름입니다. 문자열로 제공
  • value: 해당 필드에 설정할 값

 

5. @ExtendWith(SpringExtension.class)

 

  • 테스트 컨텍스트 관리: Spring이 관리하는 빈과 관련된 설정을 자동으로 처리
  • 의존성 주입: 테스트 클래스 내에서 Spring의 빈을 손쉽게 주입받아 사용 가능
  • 트랜잭션 관리: Spring의 트랜잭션 관리 기능을 사용할 수 있어, 데이터베이스 관련 테스트에서 유용

 

 

'Java & Spring > Spring' 카테고리의 다른 글

JPA - 쿼리 파일 만들기  (2) 2024.09.27
JPA - 데이터베이스와 SQL  (4) 2024.09.26
47일차 - Controller 테스트  (0) 2024.09.11
46일차 - 테스트 코드 애노테이션  (2) 2024.09.10
JWT 구현 및 사용  (0) 2024.09.09
'Java & Spring/Spring' 카테고리의 다른 글
  • JPA - 쿼리 파일 만들기
  • JPA - 데이터베이스와 SQL
  • 47일차 - Controller 테스트
  • 46일차 - 테스트 코드 애노테이션
DJ.Kang
DJ.Kang
백엔드 개발 기록 블로그
  • DJ.Kang
    DJ Hello World
    DJ.Kang
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 이론공부
        • 개념
        • 정보처리기사 필기
        • 정보처리기사 실기 기출
        • 네트워크관리사 2급
        • SQLD
      • 시스템설계
      • Java & Spring
        • TIL
        • 트러블슈팅
        • 고도화
        • 알고리즘
        • 코딩테스트
        • Java
        • Spring
        • Thymeleaf
      • 프로젝트
        • coin-trading
        • 트러블슈팅
      • Docker
      • 웹
      • git & github
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Java this
    java
    java two-pointer
    프로그래머스 java 기초트레이닝
    데이터 크기
    java 유클리드 호제법
    자료구조
    데이터 타입
    Java 생성자
    java기초
    java arrays.copyofrnage()
    java enhance switch
    java 제어자
    java super
    java 메서드
    개발로드맵
    프로그래머스 java 기초 트레이닝
    java 멤버
    java 에라토스테네스의 체
    java 세수의합
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
DJ.Kang
테스트코드 작성에 사용되는 메서드 및 애노테이션(1)
상단으로

티스토리툴바