[Spring Boot] Mockito란?

2023. 5. 31. 00:59·개발/Spring Boot
728x90
반응형

1. Mokito

Mokito는 단위 테스트를 위한 mocking 프레임 워크이다.

쉽게 말해 가짜 객체인 Mock을 생성해주고 관리하고 검증할수 있도록 지원한다.

구현체가 없거나 의존성을 고려하지 않고 특정 단위만 테스트 할 수 있도록 환경을 만들어준다.

 

2. Mock객체

https://minkwon4.tistory.com/181

여기서 registerComment 메소드를 부르면 CommentDao의 insertComment가 실행되어야 한다고 하자.

이를 위해 테스트를 한다고 했을때 중점으로 볼 부분은 insertComment가 호출이 되었는지 아닌지 이다.

즉, 내부에 어떤 코드가 작성되어있는지는 관심없고 결과가 중요한 것이다.

 

registerComment 메소드의 단위 테스트를 실행하기 위해 Mock객체는 여기서 CommentDao를 가짜로 사용할 수 있게 지원한다.

이러면 나는 CommentDao의 구현에는 신경쓸 필요 없이 registerComment 메소드에 집중할 수 있게 되었다.

 

3. 예시 코드

Mockito.when(foodServiceImpl.save(request))
                .thenReturn(response);

실제 사용했던 테스트 코드이다.

 

Mockito를 통해 mocking된 객체들의 행동을 정해줄 수 있다.

위 예시에서는 foodServiceImpl의 save 메소드로 request 매개변수를 넣어줬을때 response를 return한다 라는것이다.

foodServiceImpl의 save 메소드의 입출력을 임의로 설정한 것이다.

 

다음은 서비스 테스트 코드에서 사용했던 코드이다.

@ExtendWith(MockitoExtension.class)
public class FoodServiceTest {
    @Mock
    private FoodMapper foodMapper;

    @Mock
    private FoodRepository foodRepository;

    @InjectMocks
    private FoodServiceImpl foodServiceImpl;
    
    @DisplayName("FoodRequestDto를 받아Entity로 바꾸고 저장")
    @Test
    void saveFood(){
        // given
        CreateFoodRequest foodDto = createFoodRequest();

		Food mockedFood = Food.builder().build();
        
        Mockito.when(foodMapper.toFood(foodDto))
                .thenReturn(mockedFood);
		
        Mockito.when(foodRepository.save(Mockito.any(Food.class)))
                .thenReturn(mockedFood);

        // when
        CreateFoodResponse foodResponse = foodServiceImpl.save(foodDto);

        // then
        Assertions.assertThat(foodResponse)
                .hasFieldOrPropertyWithValue("status",true);


        Mockito.verify(foodMapper).toFood(foodDto);
        Mockito.verify(foodRepository).save(mockedFood);
    }
}

 

mock객체를 사용하면 실제 구현되어 있는 메소드에 영향을 주지 않기 때문에 좋다.

또한 마지막에 verify를 통해 실제 메소드가 사용되었는지 확인까지 할 수 있다.

 

위 코드 말고도 Mockito는 다양한 메소드를 제공한다.

 

참고

https://minkwon4.tistory.com/181

https://tecoble.techcourse.co.kr/post/2020-10-16-is-ok-mockito/

https://www.nextree.io/mockito/

728x90
반응형

'개발 > Spring Boot' 카테고리의 다른 글

[Spring Boot] Spring-REST-Docs로 자동으로 API 문서화  (0) 2023.07.17
[Spring Boot] 오버로딩 언제 할 수 있을까  (0) 2023.06.11
[Spring Boot] DI 구현 방법 3가지  (0) 2023.05.26
[Spring Boot] dotenv(.env) 때문에 날려버린 2일  (0) 2023.05.24
[Spring Boot] 어노테이션 정리  (0) 2023.05.17
'개발/Spring Boot' 카테고리의 다른 글
  • [Spring Boot] Spring-REST-Docs로 자동으로 API 문서화
  • [Spring Boot] 오버로딩 언제 할 수 있을까
  • [Spring Boot] DI 구현 방법 3가지
  • [Spring Boot] dotenv(.env) 때문에 날려버린 2일
TeTedo.
TeTedo.
  • TeTedo.
    TeTedo 개발 일기
    TeTedo.
  • 전체
    오늘
    어제
    • 분류 전체보기 (319)
      • 개발 (274)
        • Article (4)
        • 정리 (21)
        • Spring Boot (17)
        • JPA (2)
        • JAVA (6)
        • Database (4)
        • 자료구조 (11)
        • 알고리즘 (32)
        • React (20)
        • Docker (10)
        • node.js (18)
        • Devops (11)
        • Linux (4)
        • TypeScript (3)
        • Go (10)
        • HyperLedger (4)
        • BlockChain (43)
        • html, css, js (48)
        • CS (3)
        • AWS (3)
      • 모아두고 나중에 쓰기 (3)
      • 팀프로젝트 (18)
        • SNS(키보드워리어) (9)
        • close_sea (9)
      • 개인프로젝트 (1)
        • Around Flavor (1)
        • CHAM (13)
        • ethFruitShop (5)
      • 독서 (0)
        • 스프링부트와 AWS로 혼자 구현하는 웹 서비스 (0)
  • 블로그 메뉴

    • 홈
    • 개발일기
    • CS
    • 실습
    • 코딩테스트
    • 웹
    • Go
    • node.js
    • 팀플
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    도커
    CSS
    js
    명령어
    컨테이너
    프로그래머스
    go
    html
    node
    30일챌린지
    React
    nodejs
    30일 챌린지
    node.js
    go언어
    ERC721
    하이퍼레저
    mysql
    블록체인
    erc20
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
TeTedo.
[Spring Boot] Mockito란?
상단으로

티스토리툴바