• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

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

24.03.01 21:55 작성 24.03.01 21:55 수정 조회수 128

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로 지정한 값이 이용됩니다.

유준모님의 프로필

유준모

질문자

2024.03.02

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

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