[python] 단위 테스트에서의 모의 객체(Mock Object) 활용 예시

단위 테스트는 코드의 일부분을 독립적으로 테스트하여 소프트웨어의 품질을 보증합니다. 모의 객체(Mock Object)를 사용하면 코드 간의 의존성을 해결하고, 테스트를 더욱 유연하고 견고하게 만들 수 있습니다.

이 포스트에서는 Python의 단위 테스트에서 모의 객체를 어떻게 활용하는지 알아보겠습니다.

모의 객체(Mock Object)란?

모의 객체는 특정한 클래스, 모듈 또는 함수를 흉내내어 동작시키는 객체를 말합니다. 흉내내는 것이므로, 실제로 동작하는 것이 아니라 원하는 대로 가짜 동작을 하게 만들 수 있습니다.

모의 객체를 사용한 예시

아래는 모의 객체를 사용해 유연하고 견고한 단위 테스트를 작성하는 예시입니다.

from unittest.mock import Mock
import requests

class WeatherForecast:
    def __init__(self, api_key):
        self.api_key = api_key

    def get_weather(self, city):
        response = requests.get(f"https://api.weather.com/{city}", params={'api_key': self.api_key})
        return response.json()

def test_get_weather():
    # 모의 객체 생성
    mock_response = Mock()
    mock_response.json.return_value = {'weather': 'sunny'}

    # requests.get 동작을 모의 객체로 대체
    requests.get = Mock(return_value=mock_response)

    # WeatherForecast 객체 생성
    weather_forecast = WeatherForecast(api_key='fake_key')

    # get_weather() 메서드 테스트
    weather_data = weather_forecast.get_weather('NewYork')

    # 결과 검증
    assert weather_data['weather'] == 'sunny'

위의 예시에서, WeatherForecast 클래스를 테스트할 때 requests.get 메서드를 실제로 호출하지 않고 모의 객체를 사용하여 대체했습니다. 이를 통해 외부 의존성을 없애고, get_weather 메서드를 견고하게 테스트할 수 있습니다.

마무리

모의 객체를 활용하면 의존성을 감소시키고, 코드를 더욱 효과적으로 테스트할 수 있습니다. 이를 통해 소프트웨어의 품질을 향상시키고, 신뢰성 있는 코드를 작성할 수 있습니다.