파이썬에서 모의와 패치의 차이점

Marion Paul Kenneth Mendoza 2023년6월21일
  1. Python에서 MockPatch 개체 라이브러리의 사용 및 차이점
  2. 결론
파이썬에서 모의와 패치의 차이점

코드 개발은 테스트 병렬 개발(TPD)에서 가장 먼저 이루어집니다. 그래도 개발된 테스트를 작성하고 실행하여 코드의 정확성을 확인합니다(코드를 직접 실행하거나 콘솔을 사용하는 대신).

Python에는 단위 테스트라는 프로세스가 있으며 그 안에 mockpatch 기능이 있습니다. 이 문서에서는 두 역할의 용도와 차이점에 대해 설명합니다.

Python에서 MockPatch 개체 라이브러리의 사용 및 차이점

이 기사에서는 전체적으로 단위 테스트를 다루지 않고 mockpatch 기능에 더 중점을 둘 것입니다.

우리는 mock Python 패키지를 사용하여 테스트 중인 시스템의 특정 구성 요소를 mock 객체로 대체하고 해당 사용법에 대해 주장합니다. Python 표준 라이브러리의 구성 요소이며 Python 3.3부터 unittest.mock으로 액세스할 수 있습니다.

unittest.mock 클래스를 사용하면 테스트 스위트 전체에서 여러 스텁이 필요하지 않습니다. 특정 작업을 수행한 후 메서드/속성 및 이를 호출한 인수를 사용한 어설션을 설정할 수 있습니다.

반환 값을 지정하고 필요한 기능을 선택할 수 있습니다.

MagicDock은 Mock의 하위 클래스인 Magic 개체를 처리할 수 있습니다. MockMagicMock 개체는 우리가 사용할 때 특성과 메서드를 자발적으로 생성하고 사용 정보를 기록합니다.

Mocks는 많은 mocking에서 사용되는 record -> replay 패턴 대신 action -> assertion(즉, 먼저 mock을 사용한 다음 수신된 호출에 대해 어설션을 수행함) 패턴을 기반으로 합니다. 프레임워크. 또한 mock 모듈은 테스트 컨텍스트 내에서 패치 클래스 및 모듈 수준 특성을 관리하는 patch()라는 데코레이터와 고유한 인스턴스를 생성하기 위한 센티널을 제공합니다.

예제 코드:

from unittest.mock import patch


@patch("sample_module.sample_object")
def test_function(mock_object):
    print(mock_object)

출력:

<MagicMock name='sample_object' id='1870192341512'>

위의 코드 스니펫은 아래 스니펫과 동일합니다.

def test_function():
    with patch("sample_module.sample_module") as mock_object:
        print(mock_object)

이 함수를 사용하면 객체를 mock 객체로 대체하여 생산 코드 호출을 피하고 원래 객체가 호출되는 방식을 확인할 수 있습니다(객체가 함수인 경우). 다른 테스트나 프로그램이 영향을 받지 않도록 테스트 후(또는 두 번째 경우 컨텍스트 관리자 범위 이후) 패치가 되돌려지도록 patch(또는 유사한 방법)를 사용하는 것이 좋습니다.

결론

의사 결정에 도움이 되도록 다음 사항을 참고할 수 있습니다.

  1. 객체를 모의 객체(또는 다른 객체)로 편리하게 대체하고 완료 후 이전 상태로 복원하거나 예외의 경우 패치 데코레이터/컨텍스트 관리자 기능을 사용합니다.
  2. mock.patch는 수동으로 생성할 수 있는 mock 또는 파생 개체를 생성합니다. 수동 빌드는 재설정이 필요하지 않은 로컬 함수 또는 기타 모의 객체를 복구하는 데만 사용됩니다.
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn

관련 문장 - Python Unittest