[python] 테스트 더블(Mock, Stub, Spy)과의 차이점과 활용 방법

테스트 더블(Test Double)은 소프트웨어 테스트에서 다른 객체를 대신하여 사용되는 객체를 의미합니다. 이를 통해 테스트를 빠르게 실행하고 복잡한 의존성을 관리할 수 있습니다. 테스트 더블에는 Mock, Stub, Spy가 있으며, 각각의 역할과 활용 방법에 대해 알아보겠습니다.

Mock

Mock은 목적 객체가 특정 메서드를 호출했는지, 호출된 함수의 매개변수가 올바른지 여부를 확인하는 데 사용됩니다. 보통 메서드를 호출한 횟수나 순서 등을 확인할 때 Mock을 활용합니다.

예를 들어, 다음은 Mock을 사용하여 메서드 호출을 확인하는 Python 코드의 예시입니다:

from unittest.mock import Mock

# Mock 객체 생성
mock_obj = Mock()

# 메서드 호출 확인
mock_obj.method(3, 4)
mock_obj.method.assert_called_once_with(3,4)

Stub

Stub은 목적 객체가 반환해야 하는 값을 조작하여 설정하는 용도로 사용됩니다. 실제 의존 객체의 동작을 대체하여 원하는 값을 반환하게 할 수 있습니다.

다음은 Stub을 활용하여 특정 메서드가 호출됐을 때 원하는 값을 반환하는 Python 코드의 예시입니다:

from unittest.mock import MagicMock

# Stub 객체 생성
stub_obj = MagicMock()
stub_obj.method.return_value = 42

# 메서드 호출 시 원하는 값 반환
result = stub_obj.method()
assert result == 42

Spy

Spy는 목적 객체의 메서드 호출 여부, 호출 횟수, 호출된 매개변수 등을 확인하는 용도로 사용됩니다. 실제 메서드를 호출하되, 호출된 정보를 관찰할 때 주로 활용됩니다.

아래는 Spy를 통해 메서드 호출 정보를 확인하는 Python 코드의 예시입니다:

from unittest.mock import MagicMock

# Spy 객체 생성
spy_obj = MagicMock()
result = spy_obj.method(3, 4)

# 메서드 호출 정보 확인
assert spy_obj.method.called
assert spy_obj.method.call_args == ((3, 4), {})

결론

Mock, Stub, Spy는 각각의 목적에 따라 테스트 더블을 유연하게 활용할 수 있도록 도와줍니다. 테스트 코드 작성 시 특정 상황에 맞게 적절한 테스트 더블을 선택하여 활용하면 보다 효율적인 테스트 코드를 작성할 수 있습니다.

참고자료:

이상으로 테스트 더블(Mock, Stub, Spy)과의 차이점과 활용 방법을 간략하게 살펴보았습니다. 감사합니다!