파이썬에는 매직 메서드(macig method)라는 개념이 있다.
모든 객체에는 언어 레벨에서 특수한 목적으로 쓰이는 메서드들을 정의할 수 있다.
대표적으로 __str__
의 경우, 객체를 읽기 좋은 형태의 문자열로 출력하기 위해서 사용되는 매직 메서드이다.
class NullBlog:
pass
null_blog = NullBlog()
print(null_blog)
# 결과:
# <__main__.NullBlog object at 0x000002A999E9B6C8>
######################################################
class NullBlog:
def __str__(self):
return "Null's Blog"
null_blog = NullBlog()
print(null_blog)
# 결과:
# Null's Blog
기본적으로 Mock
클래스를 사용하면 이러한 매직 메서드가 자동으로 모킹되지 않는다.
from unittest.mock import Mock
mock = Mock()
mock.__str__.return_value
하지만 Mock
클래스의 확장 버진인 MagicMock
클래스를 사용하면 이러한 매직 메서드를 미리 알아서 모킹을 해놓기 때문에 편리하다.
from unittest.mock import MagicMock
mock = MagicMock()
mock.__str__.return_value
mock.__str__.return_value = "I'm a magic mock."
str(mock)
실제 프로젝트에서 Unit Test
를 작성할 때는 이렇게 직접 Mock
을 생성하는 것 보다는 patch()
데코레이터를 사용하는 것이 일반적이다.