Python

[Python] unittest - MagicMock

비번변경 2026. 3. 18. 10:39

개요

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