본문 바로가기

TIL

[Spring MVC][Mockito]

728x90

학습 목표

  • Mock의 의미를 이해할 수 있다.
    테스트 세계에서의 Mock은 바로 가짜 객체를 의미한다.
    Mock객체를 사용하는 이유

MemberControllerTest 클래스의 postMemberTest()테스트 실행 흐름

위  그림을 보면 MemberController의 postMember() 핸들러 메서드쪽만 테스트해야 되는데 서비스 계층을 거쳐 데이터 액세스 계층 그리고 데이터베이스까지 그 동작 흐름이 끝까지 이어졌다가 되돌아 오기 때문에 슬라이스 테스트라기 보다 통합 테스트에 가깝다.
슬라이스 테스트의 목적은 해당 계층 영역에 대한 테스트에 집중하는 것이다. 

Mock객체를 사용한 MemberControllerTest 클래스의 postMemberTest() 실행흐름

 MemberController에서 MemberService 클래스의 createMember()를 호출하지 않고, MockMemberService 클래스의 createMember()를 호출한다. Mock객체를 이용함으로써 다른 계층과 단절되어 불필요한 과정을 줄일 수 있다.

 

 

  • Mockito는 Mock 객체를 생성하고, 해당 Mock 객체가 진짜처럼 동작하게 하는 기능을 하는 Mocking framework(또는 라이브러리)이다.
  • @MockBean 애너테이션은 Application Context에 등록되어 있는 Bean에 대한 Mockito Mock 객체를 생성하고 주입해주는 역할을 한다.
  • Junit에서 Spring을 사용하지 않고 순수하게 Mockito의 기능만을 사용하기 위해서는 @ExtendWith(MockitoExtension.class)를 클래스 레벨에 추가해야 한다.
  • @Mock 애너테이션을 추가하면 해당 필드의 객체를 Mock 객체로 생성한다.
  • @Mcok 애너테이션을 통해 생성된 Mock 객체는 @InjectMocks 애너테이션을 추가한 필드에 주입된다.
  • Mockito의 기본 사용법을 이해할 수 있다.
  • 비즈니스 로직의 단위 테스트에 Mockito를 적용할 수 있다.
  • Controller의 슬라이스 테스트에 Mockito를 적용할 수 있다.
 

 

728x90

'TIL' 카테고리의 다른 글

[Spring MVC][API 문서화]  (0) 2022.11.11
[SpringMVC][TDD]  (0) 2022.11.10
[Spring MVC][Slice Test]  (0) 2022.11.09
[JUnit으로 비즈니스 로직에 단위 테스트 적용하기]  (0) 2022.11.09
[Spring][Hamcrest]  (0) 2022.11.09