[TDD/방법론] Mockito란?

nana·2024년 9월 13일

방법론

목록 보기
6/9

📍 What is Mockito?

Java 오픈소스 테스트 프레임워크

  • Mockito사용 시 실제 객체를 모방한 가짜 객체Mock 객체 생성이 가능해짐.
  • API client service를 만들어 테스트 하거나, 외부 서비스의 API client 혹은 DB와의 연결이 포함된 비즈니스 로직을 테스트 해야 한다면 웹 통신과 DB연결을 위한 소프트웨어가 필요할것.
    이러한 연관성을 가진 프로그램을 테스트하기 위한 객체가 Mockito의 Mock객체이다.
  • 단위 테스트나 슬라이스 테스트 등에 Mock객체를 사용하는 것을 Mocking이라고 한다.

용어 정리

Mock

  • 진짜 객체와 비슷하지만 물리적으로 같지 않고 프로그래머가 직접 행동을 관리하는 객체
  • Mock은 모든 상호작용을 기억한다. 사용자는 Mock의 어떤 메서드가 실행되었는지 선택적으로 검증할 수 있다.

Stubbing

  • 테스트 코드에서 Mock객체를 사용할 때 Mock의 특정 메서드 호출과 응답을 정의하는 것.

👉 컨트롤러에서 실제 서비스를 호출하지 않고 Mock 프레임워크에서 만든 Mock서비스를 호출하는 방식으로 계층간 연결을 끊는 것!

Mokito 의존성 추가

// build.gradle
dependencies {
    testImplementation 'org.mockito:mockito-core:4.8.0
}

주요 기능

  • @MockBean : Application Context에 등록되어 있는 Bean에 대한 Mock객체를 생성하고 주입하는 역할을 수행한다.
  • given(서비스.메서드(Mockito.any(엔티티.class))) : Mock객체가 특정 값을 리턴하는 동작을 지정함. Mock객체인 서비스의 메서드를 정의함.
  • Mockito.any(엔티티.class)) : 변수타입 중 하나로 매개변수의 타입을 정의함.
  • .willReturn(stub객체) : Mock객체는 실제 기능을 구현하는 것이 아니므로 실제처럼 행동하기 위해 미리 정의된 값을 반환한다. .willReturn()메서드로 반환값을 미리 지정할 수 있다.
    미리 정해진 반환객체를 "stub객체" 라고 부른다.

레포지토리를 호출하는 부분이 Mocking될 것

  • @ExtendWith(MockitoExtension.class) : Spring을 사용하지 않고 Junit에서 Mockito 기능을 사용
  • @Mock : 필드에 해당하는 Mock객체를 생성
  • @InjectMock :필드에 해당하는 Mock객체를 만들고 DI로 Mock객체를 주입
  • given(레포지토리.findBy필드(엔티티.get필드())).willReturn(Optional.of(엔티티)); : 서비스에서 레포지토리의 메서드를 호출하는 부분을 Mocking. 즉 실제 페포지토리가 아닌 Mock레포지토리의 메서드를 정의.
    willReturn()메서드는 반환할 stub객체를 정의.
    stub객체는 개발자가 사전에 정해놓은 고정된 데이터

참고 링크

참고 1
참고 2

profile
BackEnd Developer, 기록의 힘을 믿습니다.

0개의 댓글