[python] 테스트 더블(Mock, Stub, Spy)을 이용한 모킹 방법

테스트 더블은 소프트웨어의 테스트를 위해 사용되는 객체입니다. 주로 테스트하는 컴포넌트와 관련이 있는 다른 컴포넌트들을 대신하여 사용됩니다. 테스트 더블에는 Mock, Stub, Spy가 있습니다.

Mock

Mock은 실제 객체의 동작을 모방하는데 사용됩니다. 특정 메서드가 호출되었는지, 몇 번 호출되었는지, 어떤 매개변수로 호출되었는지 등을 확인할 때 Mock을 사용합니다.

예를 들어, mock 라이브러리를 사용해 Mock 객체를 생성하고 특정 메서드의 호출 여부를 확인할 수 있습니다.

from mock import Mock

# Mock 객체 생성
mock_obj = Mock()

# 메서드 호출 여부 확인
mock_obj.method.assert_called_once()

Stub

Stub은 특정 메서드가 호출되었을 때 명시적으로 지정한 결과를 반환하도록 설정하는데 사용됩니다. 실제 객체의 행동을 모방하지 않고, 테스트 시점에 원하는 값을 반환하도록 구성합니다.

예를 들어, unittest.mock 모듈을 사용해 Stub 객체를 생성하고 특정 메서드의 반환 값을 설정할 수 있습니다.

from unittest.mock import MagicMock

# Stub 객체 생성
stub_obj = MagicMock()
# 메서드의 반환 값을 설정
stub_obj.method.return_value = 100

Spy

Spy는 실제 객체처럼 동작하지만, 해당 객체의 메서드 호출 정보를 기록하거나 메서드 호출 전/후에 작업을 수행하는데 사용됩니다.

예를 들어, unittest.mock 모듈을 사용해 Spy 객체를 생성하고 메서드 호출 정보를 확인할 수 있습니다.

from unittest.mock import MagicMock

# Spy 객체 생성
spy_obj = MagicMock()
# 메서드 호출 정보 확인
spy_obj.method.assert_called_once()

위와 같이 Mock, Stub, Spy를 활용하여 테스트 더블을 만들고, 테스트하는 컴포넌트와의 상호작용을 효과적으로 관리할 수 있습니다.

참고 자료