강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

김혜윤님의 프로필 이미지
김혜윤

작성한 질문수

테스트 with Jest: 제로초에게 제대로 배우기

mockImplementation, mockReturnValue

mockfunction에 대해서

작성

·

19

0

안녕하세요 선생님

mockfunction에 대해서 설명 듣다가 질문이 생겨 글 남깁니다.

mockfunction이 좋고 유용한 이유가 기존 함수를 변경할 수 있다는 점이라고 하셨는데 , 기존 함수를 변경해서 테스트를 왜 하는지 모르겠습니다 .추후 강의에서 나오는 부분일까요?

 

그러니까 "필요성"에 대해서 공감이 가지 않는 것 같습니다,, 개발한 함수가 잘 돌아가는지에 대해서 테스트하면 되는 것인데 왜 다른 함수로 바꿔서 테스트를하나요? 그게 버그잡기 등의 효과가 있나요? 있다면 예를 들면 어떤상황이 있을지 알려주심 넘 감사할것 같습니다. 감사합니다

답변 2

0

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

개발한 함수를 바꾸는 게 아니고, 개발한 함수가 사용하고 있는(또는 의존하고 있는) 다른 함수를 바꾸는 것입니다. 유닛 테스트의 목적은 내가 테스트하고싶은 함수 하나만 잘 돌아가나 테스트하는 것이지, 테스트하고싶은 함수 내부의 다른 라이브러리함수까지 잘 돌아가나 테스트하는 게 아닙니다. 내부의 다른 라이브러리 함수까지 테스트하는 것은 통합테스트라고 따로 있습니다.

예를 들어 a라는 함수가 있고, a 함수가 데이터베이스에 insert를 하는 함수를 호출한다고 하면, a 함수 테스트를 돌릴 때마다 데이터베이스에 값이 insert됩니다. 이런 걸 막으려면 insert하는 함수를 모킹하고, 단순히 호출되었는지만 체크하는 겁니다.

0

안녕하세요, 인프런 AI 인턴입니다.
김혜윤 님

mock function(모의 함수)을 사용하는 이유는 여러 가지가 있습니다. 개발한 코드가 잘 작동하는지 테스트할 때, 항상 모든 실제 종속성을 사용할 수 있는 것은 아닙니다. 모의 함수를 통해 다음과 같은 상황에서 유용하게 사용할 수 있습니다:

  1. 외부 종속성 제거: 어떤 함수가 외부 API나 데이터베이스에 의존하는 경우, 이를 호출하면 테스트가 느려지거나 결과가 예측할 수 없게 될 수 있습니다. 모의 함수를 사용하여 외부 종속성을 제거하고 빠르고 신뢰할 수 있는 테스트를 작성할 수 있습니다.

  2. 비정상적인 상황 시뮬레이션: 특정 오류나 경계 상황을 테스트하고자 할 때 실제로 그런 상황을 재현하기 어렵거나 위험할 수 있습니다. 예를 들어, 네트워크 오류나 서버 중단 상황을 테스트하려면 모의 함수를 통해 그러한 상황을 인위적으로 만들어낼 수 있습니다.

  3. 테스트 격리: 단위 테스트는 테스트할 항목을 독립적으로 유지하는 것이 중요합니다. 모의 함수를 사용하면 다른 부분에서 영향을 받지 않도록 만들 수 있습니다.

예를 들어, 결제 시스템을 개발할 때, 결제 API를 매번 호출하기 보다는 mock function으로 결제 성공 또는 실패를 시뮬레이션하여 다양한 시나리오를 테스트할 수 있습니다. 이것은 테스트 속도를 높이고 테스트 실행 비용을 줄입니다.

이해에 도움이 되셨길 바랍니다. 감사합니다.

참고 자료: Spring Boot Reference Documentation에서 모킹에 대한 예제들.

김혜윤님의 프로필 이미지
김혜윤

작성한 질문수

질문하기