[python] Mock 객체를 이용한 외부 의존성 제어 방법

외부 의존성을 가진 코드를 단위 테스트할 때, 테스트 실행 환경을 제어하기 위해 Mock 객체를 사용할 수 있습니다. Mock은 특정 동작을 가짜로 대체하는 객체로, 코드의 외부 의존성을 모의할 수 있게 해줍니다. 이번 포스트에서는 Python에서 Mock 객체를 어떻게 활용하는지에 대해 알아보겠습니다.

Mock 객체란?

Mock 객체는 테스트 중에 실제 객체를 대신하여 사용됩니다. 코드가 외부 자원에 의존하고 있을 때 해당 자원을 모의하여 테스트할 수 있도록 해줍니다.

외부 API 모의 예제

다음은 외부 API 호출을 모의하는 예제입니다.

import requests
from unittest.mock import patch
from my_module import get_data

def test_get_data_with_mock():
    with patch('my_module.requests.get') as mock_get:
        mock_response = {'key': 'value'}
        mock_get.return_value.json.return_value = mock_response

        result = get_data()

        mock_get.assert_called_once_with('http://api.example.com/data')
        assert result == mock_response

위의 코드에서 patch를 사용하여 requests.get을 모의하고, 모의 응답을 설정한 후 get_data 함수를 호출하고 결과를 확인하는 것을 볼 수 있습니다.

Mock 객체의 유용성

Mock 객체를 사용하면 실제 외부 의존성을 가진 객체를 대체하여 테스트를 수행할 수 있습니다. 이를 통해 외부 환경이나 네트워크 상태에 영향을 받지 않고도 코드의 특정 동작을 테스트할 수 있게 됩니다.

마치며

Mock 객체를 활용하여 외부 의존성을 제어하는 것은 코드의 테스트 가능성을 높이는 데 도움을 줍니다. 이를 통해 코드를 안정적으로 유지하고 외부 환경에 덜 민감하게 만들 수 있습니다. Python에서는 unittest.mock 모듈을 사용하여 Mock 객체를 쉽게 활용할 수 있습니다.

참고 자료: Python unittest.mock 모듈 공식 문서