테스트코드 작성에 사용되는 메서드 및 애노테이션(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  (3) 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
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 이론공부
      • 시스템설계
      • Java & Spring
        • TIL
        • 트러블슈팅
        • 고도화
        • 알고리즘
        • 코딩테스트
        • Java
        • Spring
        • Thymeleaf
      • 프로젝트
        • coin-trading
        • 트러블슈팅
      • Docker
      • DB
      • AWS
      • CI-CD
      • 웹
      • git & github
      • 구인공고분석
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바