Mockito?

nero·2023년 3월 27일
0

개인적인 학습을 기록한 글이며, 정확하지 않을 수 있습니다.
틀린점은 지적해주시고, 참고만 해주시기 바랍니다

Intro

  • Service Layer 테스트할때 의존성을 끊기가 쉽지가 않다.. 어디까지 테스트를 하고 Repository 까지 테스트해야 되는지 난감할때가 많다. 그때 사용하는 것이 Mockito 라이브러리이다.

1. Mockito란?


Tasty mocking framework for unit tests in Java

(마치 모히또? 를 연상시키는 로고이다)
홈페이지를 들어가면 소개란에 써있는 문구 인데 Java의 단위 테스트를 위한 맛있는 모킹 프레임워크라고 한다! 여기서 모킹이란 것부터 살펴보자

모킹(mocking)

  • Mock을 만들어서 끼워주는 행위이다.

Mock?

영단어로 해석하면 모조품이라고 해석된다. 컴퓨팅 용어에서는 Mock Object로 많이 사용되는데, 객체지향 프로그래밍에서 테스트를 할경우 테스트 모듈과 연결되는 외부의 다른 서비스나 모듈을 실제 사용하는 모듈을 사용하지 않고 흉내, 가짜 모듈을 작성할때 사용되는 객체라고한다.

  • 요약하면 "흉내","가짜" 정도의 객체라고 볼 수 있다.

Why Drink it?

다시 돌아가서 왜 mockito 인가? (왜 마셔야 하는가..)
홈페이지에서는 요약하면 이렇게 말하고 있다

  • 맛 좋은 모킹 프레임워크다. 깨긋하고 간단한 API로 멋진 테스트를 할수있다
  • Java에서 가장 좋은 MOCK 프레임워크이다.
  • 암튼 좋다 그래서 마셔야한다.

2. Mockito 어노테이션

@Mock, @Spy @InjectMocks

  • 자바하면 어노테이션, Mokcito에도 대표적인 주입 방법이다.

a.@Mock

  • 반복적인 모의 생성 코드를 최소화
  • 테스트 클래스의 가독성을 높인다
  • mock을 filed name으로 사용되어 검증 오류를 쉽게 만든다
  @Mock
  private Member member;

  @BeforeEach
  void setUp() {
        MockitoAnnotations.openMocks(this);
  }
  
  // 더 간편하게 사용하는 법
  @ExtendWith(MockitoExtension.class)
  public class mockitoTest {}
  
  • @Mock 어노테이션을 사용하려면 클래스의
    @ExtendWith(MockitoExtension.class)
    를 붙여 주면된다.

    💧참고

    @ExtendWith is a repeatable annotation that is used to register extensions for the annotated test class, test interface, test method, parameter, or field.
    @ExtendWith는 주석이 달린 테스트 클레스,인터페이스,메서드 확장을 등록하는 주석 이다.

b.@InjectMocks

  • @Mock, @Spy 필드를 자동으로 주입한다

c.@Spy

  • Spy 객체를 만들어 반환 실제 인스턴스를 사용해 mocking Spy 객체는 행위를 지정하지 않으면 객체를 만들 때 사용한 실제 인스턴스의 메서드를 호출한다.

참고 사이트
https://ko.wikipedia.org/wiki/%EB%AA%A8%EC%9D%98_%EA%B0%9D%EC%B2%B4
https://javadoc.io/doc/org.mockito/mockito-core/latest/org/mockito/Mockito.html#21

profile
겸손하게 배우는 개발자입니다

0개의 댓글