Vitest 함수 모킹과 스파잉

mocking은 단위 테스트를 작성할 때, 해당 코드가 의존하는 부분을 가짜(mock)로 대체하는 기법을 말하는데요. 일반적으로 테스트하려는 코드가 의존하는 부분을 직접 생성하기가 너무 부담스러운 경우 mocking이 많이 사용됩니다.


예를 들어, 데이터베이스에서 데이터를 삭제하는 코드에 대한 단위 테스트를 작성할 때, 실제 데이터베이스를 사용한다면 여러 가지 문제점이 발생할 수 있습니다.


  • 데이터베이스 접속과 같이 Network이나 I/O 작업이 포함된 테스트는 실행 속도가 현저히 떨어질 수 밖에 없습니다.

  • 프로젝트의 규모가 커져서 한 번에 실행해야 할 테스트 케이스가 많이지면 이러한 작은 속도 저하들이 모여 큰 이슈가 될 수 있으며, CI/CD 파이프라인의 일부로 테스트가 자동화되어 자주 실행되야 한다면 더 큰 문제가 될 수 있습니다.

  • 테스트 자체를 위한 코드보다 데이터베이스와 연결을 맺고 트랜잭션을 생성하고 쿼리를 전송하는 코드가 더 길어질 수 있습니다. 즉, 배보다 배꼽이 더 커질 수 있습니다.

  • 만약 테스트 실행 순간 일시적으로 데이터베이스가 오프라인 작업 중이었다면 해당 테스트는 실패하게 됩니다. 따라서 테스트가 인프라 환경에 영향을 받게됩니다. (non-deterministic)

  • 테스트가 종료 직 후, 데이터베이스에서 변경 데이터를 직접 원복하거나 트렌잭션을 rollback 해줘야 하는데 상당히 번거로운 작업이 될 수 있습니다.


무엇보다 이런 방식으로 테스트를 작성하게 되면 독립적인 기능 단위로 테스트하겠다는 단위 테스팅(Unit Testing)의 본연의 의도에 맞지 않게 되겠죠?


mocking은 이러한 상황에서 실제 객체인 척하는 가짜 객체를 생성하는 매커니즘을 제공합니다. 또한, 테스트가 실행되는 동안 가짜 객체에 어떤 일들이 발생했는지를 기억하기 때문에 가짜 객체가 내부적으로 어떻게 사용되는지 검증할 수 있죠. 결론적으로, mocking을 이용하면 실제 객체를 사용하는 것보다 훨씬 가볍고 빠르게 실행되면서도, 항상 동일한 결과를 내는 테스트를 작성할 수 있습니다.


📺 동영상: https://youtu.be/xBdMoedbWB4

📝 포스팅: https://www.daleseo.com/vitest-fn-spy-on/


차세대 테스팅 프레임워크로 각광받고 있는 Vitest를 학습하시는 분들께 아래 게시물도 추천드리겠습니다.


📕 Vitest 처음 시작하기: https://careerly.co.kr/comments/115949

📗 Vitest 결과 매칭: https://careerly.co.kr/comments/116437

📘 Vitest 그룹화: https://careerly.co.kr/comments/116659

📙 Vitest 테스트 전/후 처리하기: https://www.daleseo.com/vitest-fn-spy-on/


Vitest와 함께 사용하면 시너지를 발휘하는 차세대 번들러 Vite에 대해서는 아래 게시물을 참고하세요.


📓 Vite 처음 시작하기: https://careerly.co.kr/comments/115727

다음 내용이 궁금하다면?

또는

이미 회원이신가요?

2025년 2월 17일 오후 8:26

 • 

저장 11조회 2,861

댓글 1

  • 더 이상 지루한 축구 경기는 없습니다! https://footballbrosgame.org 은 흥미진진한 액션, 경쟁적인 게임플레이, 그리고 순위를 올릴 수 있는 기회로 열기를 선사합니다.

함께 읽은 게시물

< 진짜 강함은 자기 틀림을 인정하는 용기에서 나온다 >

1. 진짜로 강한 사람이 왜 부드러운 줄 아는가? 유연하기 때문이다.

... 더 보기

Build a UIKit app with the new design

W

... 더 보기

Build a UIKit app with the new design (feat. WWDC 2025)

iOYES

Build a UIKit app with the new design (feat. WWDC 2025)

올바른 데이터 분석 프로젝트를 하기 위한 준비

"데이터 분석 프로젝트는 어떻게 시작이 될까" [분석 프로젝트 단계] 데이터 분석 프로젝트는 아래와 같이 3단계로 나누어 볼 수 있습니다. 1. 준비 : 분석 과제를 정의하고 범위 설정, 리소스, 협의 체계 등을 수립하는 단계 2.분석 : 필요한 데이터 마트 구축, 데이터 수집, 가공, 분석, 모델링 및 검증 3.결과 : 분석의 결과물을 비즈니스에 적용 현업 데이터 분석가로 일을 하면서 여러 분석 프로젝트 가운데 성공적으로 끝난 프로젝트도 있었지만 그렇지 않은 채 실패한 프로젝트도 있었습니다. 실패한 프로젝트를 ... 더 보기

올바른 데이터 분석 프로젝트를 하기 위한 준비 : 네이버 블로그

blog.naver.com

올바른 데이터 분석 프로젝트를 하기 위한 준비 : 네이버 블로그

 • 

댓글 1 • 저장 12 • 조회 830


Next.js 프로젝트를 AWS EKS에 배포하며 배운 것들

... 더 보기

쿠버네티스를 활용한 클라우드 네이티브 데브옵스 | 존 어런들 - 교보문고

product.kyobobook.co.kr

쿠버네티스를 활용한 클라우드 네이티브 데브옵스 | 존 어런들 - 교보문고

 • 

댓글 1 • 저장 29 • 조회 2,782


“직원들에게 월급 외에 출근할 이유를 줘야 합니다. 팀장이 좋다던가, 이 일이 날 성장시킨다던가, 이 일이 좋다던가, 이게 다 여기에 해당합니다.“ 박웅현 TBWA 코리아 조직문화연구소 소장은 직원들을 조직에 남게하는 방법을 이렇게 제안했다.

... 더 보기

박웅현 TBWA 조직문화연구소장 "모든 직원은 고객, '회사 팬' 만들어야" [뉴시스 포럼-10년후 한국]

뉴시스

박웅현 TBWA 조직문화연구소장 "모든 직원은 고객, '회사 팬' 만들어야" [뉴시스 포럼-10년후 한국]

메타(Meta)가 최소 1천만 달러(약 135억원)에 달하는 연봉을 제시하며 세계 최고 수준의 인공지능(AI) 연구자 영입에 본격 나섰다. 특히 마크 저커버그 최고경영자(CEO)가 직접 스카우트에 나서면서 업계의 이목이 집중되고 있다.

... 더 보기

"최소 연봉 135억"…저커버그, 세계 최고 AI 인재 직접 영입 나섰다

zdnet.co.kr

"최소 연봉 135억"…저커버그, 세계 최고 AI 인재 직접 영입 나섰다