테스트 더블(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는 각각의 목적에 따라 테스트 더블을 유연하게 활용할 수 있도록 도와줍니다. 테스트 코드 작성 시 특정 상황에 맞게 적절한 테스트 더블을 선택하여 활용하면 보다 효율적인 테스트 코드를 작성할 수 있습니다.
참고자료:
- Python 공식 문서: https://docs.python.org/3/library/unittest.mock.html
이상으로 테스트 더블(Mock, Stub, Spy)과의 차이점과 활용 방법을 간략하게 살펴보았습니다. 감사합니다!