instance Mock method 모킹
객체 method 모킹하기
찾아보거나 알게된 배경
테스트 작성하다가 알게되었다.
요약
아래처럼 instance에 대해 mock으로 만들고, 테스트 인라인에서 method를 patch해주려면 아래처럼 해야한다.
내용
- split_temp.py
class OriginAny: def running(self): return "origin_run!" class CallingAny: def work(self): org = OriginAny() return org.running() - test.py
class AnyMock(MagicMock): def __init__(self, *args: any, **kw: any): super().__init__(*args, **kw) self.mock_add_spec(spec=OriginAny) class TestCallingAny_work_메서드_호출시: @patch("split_temp.OriginAny", new_callable=AnyMock) def test_any(self, mock_origin_any: AnyMock): instance = mock_origin_any.return_value instance.running.return_value = "mock_run!" calling_any = CallingAny() result = calling_any.work() assert mock_origin_any.mock_calls == [call(), call().running()] assert result == "mock_run!"