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

유준모님의 프로필 이미지
유준모

작성한 질문수

실전! FastAPI 입문

(실습) 테스트 코드 - DELETE API

pytest는 어떻게 모킹함수를 인지하는지

해결된 질문

작성

·

223

·

수정됨

0

안녕하세요 강사님

강의 정말 재밌게 보고 있습니다.

수강 도중 궁금한 내용이 생겨 질문 남깁니다.

mocker.patch("main.get_todo_by_todo_id",
             return_value=Todo(id=1,contents="todo",is_done=True))

여기서 인자값으로 문자열 main.get_todo_by_todo_id 를 전달했는데, pytest는 어떻게 저 함수를 모킹대상으로 인지하나요? 개념적으로 설명해주시면 감사합니다~!!

 

response = client.patch("/todos/1", json={"is_done":False})

해당 api 를 호출하고 실행하는 과정에서

main_get_todo_by_todo_id 함수를 호출할 때 어떻게 모킹처리가 되는지 궁금합니다.

답변 1

0

신동현님의 프로필 이미지
신동현
지식공유자

안녕하세요. mocker fixture를 통해 patch()에 문자열을 전달하면 해당 경로의 함수가 호출되지 않고, Mock 객체가 대신 이용되며 이 때 반환값으로는 return_value로 지정한 값이 이용됩니다.

유준모님의 프로필 이미지
유준모
질문자

넵넵 그 부분은 이해가 되었는데, 어떻게 해당 함수가 호출되지 않고 mock 객체로 분기처리 되는건지 내부 원리가 궁금해서요 ~

신동현님의 프로필 이미지
신동현
지식공유자

pytest의 lifecycle 안에서 import 된 모듈 대신 mocker에 지정된 모듈을 대신 호출하도록 내부처리가 되어 있을 것 같아요. 자세한 내용은 python unittest mock의 구현이나 pytest mock 구현을 직접 확인 부탁드립니다.

유준모님의 프로필 이미지
유준모

작성한 질문수

질문하기