[python] 모킹(Mocking)과 스텁(Stub)의 차이점

소프트웨어 테스트에서 모킹(Mocking)스텁(Stub)은 두 가지 중요한 컨셉입니다. 이 두 가지는 둘 다 테스트하기 위해 가짜 객체를 만들어 실제 객체를 대신하여 사용하는데, 이 때문에 종종 혼동되곤 합니다. 하지만 이 두 가지는 다른 목적과 사용 방법을 가지고 있습니다.

스텁(Stub)

스텁은 실제로 호출되지 않은 메소드에 대한 가짜 동작을 제공하는 데 사용됩니다. 예를 들어, 네트워크 요청을 시뮬레이션하거나 데이터베이스 쿼리를 가짜로 대체하는 데 사용될 수 있습니다. 스텁은 일반적으로 테스트 과정에서 사용되는 가벼운 객체입니다.

아래는 스텁을 사용하는 예시 코드입니다.

class Database:
    def fetch_data(self, query):
        return "Real data from the database"

class StubDatabase:
    def fetch_data(self, query):
        return "Fake data for testing"

def test_data_fetching():
    database = StubDatabase()
    assert database.fetch_data("some query") == "Fake data for testing"

모킹(Mocking)

모킹은 삽입되어 있는 객체에 대한 행동을 대체하여 원하는 결과를 반환하는 것을 의미합니다. 주로 기능을 테스트하거나 다른 객체와 상호작용을 테스트할 때 사용됩니다. 실제로 호출될 수도 있습니다.

아래는 모킹을 사용하는 예시 코드입니다.

from unittest.mock import Mock

def test_calculate_total():
    # Create a mock object
    calculator = Mock()
    # Define the desired behavior of the mock object
    calculator.add.side_effect = lambda x, y: x + y
    assert calculate_total(3, 4, calculator) == 7

결론

모킹스텁은 각각 다른 목적을 가지고 있으며, 테스트 중에 필요한 작업에 따라 적절하게 사용되어야 합니다. 스텁은 가짜로 대체된 메소드의 단순한 결과를 제공하고, 모킹은 객체의 상호작용을 제어하고 반환 값을 설정합니다.

모킹과 스텁은 테스트 주도 개발(TDD)에서 매우 중요한 개념이므로, 올바른 방법으로 사용하는 것이 중요합니다.

참고 자료