Unit Test 02. Mocking, Patching

BLAKE KIM·2020년 9월 6일
1

테스트는 버그가 있음을 보여줄 뿐, 버그가 없음을 보여줄 수는 없다.

- 에츠허르 비버 데이크스트라 -

Mocking: 함수의 결과를 내가 의도한 값으로 덮기

Patching: 불러와야하는 모듈 자체를 통째로 mocking

2차 프로젝트 중 카카오 소셜 로그인 unittest 작성하기 위해 mockingpatching이 필요하다. 왜냐하면 실제로 unittest마다 카카오 api를 호출할 수 없기 때문이다. 카카오 로그인 api의 경우 비용이 들지 않지만 실제로 몇몇 api의 경우 비용을 지불해야하는데 테스트 때마다 비용이 청구되면 안되기 때문이다.

구체적인 내용은 아래 코드를 보면서 설명하도록 한다.

user/tests.py

from unittest.mock import patch, MagicMock

카카오 소셜 로그인의 unittest를 작성하기 위해 필요한 모듈 import

patch 함수는 기존의 데코레이터 형식으로 사용한다. @patch('실행시키지 않고 mocking할 모듈')를 테스트 함수에 작성한다. 원래 views.pyrequests.get 을 사용하는데 그에 대한 결과값을 mocking해서 설정해야한다. 해당 값을 생성하는 것이 FakeKakao이다. 그 후 mocked_request.getrequests.get을 대체하고 그 return_valueFakekakao의 결과값으로 대체하고 있다.

profile
BackEnd

0개의 댓글