공부하는 블로그

Spring | Mockito Unit Test 본문

Spring

Spring | Mockito Unit Test

치킨닮은닭 2023. 8. 27. 23:03

Mockito?

 자바에서 단위 테스트를 위한 목업 객체를 편하게 만들 수 있도록 제공되는 프레임워크입니다. 어노테이션을 선언하여 간단하게 Mocking이 가능합니다.

 

Mock

@ExtendsWith(Mockito.class)

 테스트 클래스 상단에 선언하여 Mockito를 사용함을 스프링 애플리케이션에 알립니다.

 

@Mock

 타겟 필드를 Mock으로 만들어줍니다. Mock으로 만들 멤버 객체에 선언하여 사용합니다.

 

@InjectMock

 해당 어노테이션이 선언된 타겟 필드에 @Mock 어노테이션이 붙은 Mock 객체를 주입시켜줍니다. 단위 테스트의 대상이 될 클래스에 선언하여 사용합니다. 

 

@ExtendsWith(MockitoExtension.class) // 테스트 클래스에 선언
class MyServiceTest {
  
  @Mock // mocking할 객체에 선언
  private MySubService mSubService;
  
  @InjectMock // 단위 테스트 대상이 될 서비스에 선언
  private MyService service;
  
  @Test
  void test() {
    // given
    // when
    // then
  }
}

 

MockStatic

 static 함수를 mocking할 때 사용합니다. 사용 후에 "close()" 를 꼭 사용하여 다른 테스트와 충돌하지 않도록 주의합니다.

@ExtendsWith(MockitoExtension.class) // 테스트 클래스에 선언
class MyServiceTest {

  // Static Mock 선언
  private static MockedStatic<MyUtils> mMyUtils;
  
  @InjectMock
  private MyService service;

  @BeforeAll
  void init() {
    mMyUtils = Mockito.mockStatic(MyUtil.class);  // mock 객체 할당.
  }
  
  @AfterAll
  void destroy() {
    mMyUtils.close(); // mock 객체 close.
  }
  
  @Test
  void test() {
    // given
    // when
    // then
  }

 

MockedConstruction

 단위 테스트를 진행하는 클래스 내에서 new로 새로 할당하는 객체들을 mocking할 때 사용합니다. MockStatic과 마찬가지로 사용 후에 "close()"를 꼭 사용하여 다른 테스트와 충돌하지 않도록 주의합니다.

 

@ExtendsWith(MockitoExtension.class) // 테스트 클래스에 선언
class MyServiceTest {

  // Construction Mock 선언
  private static MockedConstruction<NewService> mNewService;

  @InjectMock
  private MyService service;

  @BeforeAll
  void init() {
    mNewService = Mockito.mockConstruction(NewService.class);  // mock 객체 할당.
  }
  
  @AfterAll
  void destroy() {
    mNewService.close(); // mock 객체 close.
  }
  
  @Test
  void test() {
    // given
    // when
    // then
  }
}

 

Reference

- Mockito 공식 문서

'Spring' 카테고리의 다른 글

Spring | MockServer  (0) 2023.09.24
Spring | @TransactionalEventListener  (0) 2023.09.17
Spring | Application Event  (0) 2023.09.10
Spring | BDD - Given / When / Then  (0) 2023.09.03
Spring | Annotations  (0) 2020.09.29
Comments