[python] 단위 테스트에서의 테스트 더블(Mock, Stub, Spy) 활용 예시

단위 테스트를 작성할 때 테스트 더블(Mock, Stub, Spy)을 사용하면 테스트를 더 유연하고 격리된 환경에서 수행할 수 있습니다. 이러한 테스트 더블들은 실제 의존성을 갖는 대상 코드를 대체하고 다르게 동작하도록 설정할 수 있습니다. 이때, Mock은 호출 여부나 호출 횟수를 검증하고 Stub은 예상되는 값을 반환하며, Spy는 호출된 내용을 기록합니다.

Mock를 활용한 예시

from unittest import TestCase
from unittest.mock import Mock

class TestUserService(TestCase):
    def test_user_creation(self):
        mock_logger = Mock()
        user_service = UserService(mock_logger)
        user_service.create_user("John")
        mock_logger.info.assert_called_once_with("User John created")

Stub을 활용한 예시

from unittest import TestCase
from unittest.mock import Mock

class TestPaymentService(TestCase):
    def test_payment_approval(self):
        mock_payment_gateway = Mock()
        mock_payment_gateway.approve_payment.return_value = True
        payment_service = PaymentService(mock_payment_gateway)
        result = payment_service.process_payment(100)
        self.assertTrue(result)

Spy를 활용한 예시

from unittest import TestCase
from unittest.mock import Mock

class TestAnalyticsService(TestCase):
    def test_user_activity_tracking(self):
        mock_analytics = Mock()
        analytics_service = AnalyticsService(mock_analytics)
        analytics_service.track_user_activity("John", "Logged in")
        mock_analytics.track.assert_called_with("user_activity", user="John", activity="Logged in")

이러한 테스트 더블들을 활용하여 단위 테스트를 작성하면, 실제 의존성을 갖는 대상 코드를 분리하여 테스트할 수 있으며, 이는 코드의 격리된 검증을 가능케 하고, 테스트의 신속성과 안정성을 향상시킬 수 있습니다.

참고문헌:

더 많은 예시가 필요하시거나 궁금한 점이 있으시면 언제든지 질문해 주세요!