개요
2026.03.16-[Python] unittest.mock - 의존성 대체에서 mock 객체와 객체가 어떻게 사용되었는지 검증하는 방법에 대해 알아보았다. 다만 실제 사례에서는 일반 Mock이 아니라 MagicMock이라는 객체를 더 많이 사용하는 걸로 보이는데, 어떤 차이가 있는지 알아본다.
Mock
Python의 모든 객체는 특수한 목적으로 쓰이는 매직 메서드를 갖는다. 가령 __str__의 경우 객체를 문자열로 출력하기 위해 사용되는데, Mock은 매직 메서드가 자동으로 모킹 되지 않는다.
from unittest.mock import Mock, MagicMock, call
if __name__ == '__main__':
mock = Mock()
print(mock.__str__.return_value)

따라서 Mock 객체의 매직 메서드를 모킹하려면 새로운 Mock 객체를 생성해서 할당해주어야 하는 불편함이 있다.
from unittest.mock import Mock, MagicMock, call
if __name__ == '__main__':
mock = Mock()
mock.__str__ = Mock(return_value='mock')
print(mock.__str__.return_value)

이러한 불편함을 해소한 것이 바로 MagicMock이다.
MagicMock
MagicMock은 매직 메서드를 모킹해놓은 Mock 클래스의 확장 버전이라고 할 수 있다. Mock 클래스와 달리 매직 메서드를 별도로 모킹 하지 않아도 사용에 문제가 없다.
from unittest.mock import Mock, MagicMock, call
if __name__ == '__main__':
mock = MagicMock()
print(mock.__str__.return_value)

참고 문서
https://daleseo.com/python-unittest-mock/
728x90