PEP 417 – 표준 라이브러리에 mock 포함하기
- Author:
- Michael Foord <michael at python.org>
- Status:
- Final
- Type:
- Standards Track
- Created:
- 12-Mar-2012
- Python-Version:
- 3.3
- Post-History:
- 12-Mar-2012
- Resolution:
- Python-Dev message
번역·라이선스 안내
이 비공식 한국어 번역은 원문 Copyright 절의 Public Domain 조건에 따라 제공합니다. 원저자와 공식 원문은 그대로 표시합니다. 수정되지 않은 기준 원문 · 공식 최신판
초록
이 PEP는 mock [1] 테스트 라이브러리를 unittest.mock로 Python 표준 라이브러리에 추가할 것을 제안합니다.
근거
테스트를 위한 mock 객체를 만드는 것은 Python에서 흔히 필요한 작업입니다. 많은 개발자는 테스트 모음에서 필요할 때마다 임시 mock 객체를 만듭니다. 현재 Python 테스트 모음에서도 이렇게 하고 있으며, 표준화된 mock 객체 라이브러리가 있으면 유용할 것입니다.
Python에서 사용할 수 있는 mock 객체 라이브러리는 많습니다 [2]. 이들 중 mock은 압도적으로 가장 인기가 높으며, PyPI에서 다른 mocking 라이브러리의 다운로드 수를 모두 합한 것만큼 다운로드됩니다.
mock의 장점은 프레임워크가 아니라 mocking 라이브러리라는 점입니다. mock은 테스트를 작성하는 방식에 대해 특정한 방식을 강요하지 않으면서, 구성 가능하고 유연한 mock 객체를 제공합니다. mock API는 현재 충분한 실전 검증을 거쳤으며 안정적입니다.
mock은 테스트 범위 동안 객체에 몽키 패치를 적용하고 해제하는 작업도 안전하게 처리합니다. 이를 안전하게 수행하기는 어렵고, 많은 개발자와 프로젝트가 이 기능을 모방합니다(대개 올바르지 않게 모방합니다). 디스크립터 프로토콜(등)이 존재하는 상황에서 패치의 복잡성을 처리하면서 이를 수행하는 표준화된 방법이 유용합니다. 사람들은 unittest에 “patch” [3] 기능을 추가해 달라고 요청하고 있습니다. 이 기능의 일부를 unittest에서 다시 구현하는 것보다 mock.patch를 통해 수행하는 편이 바람직합니다.
배경
Python 표준 라이브러리에 mock을 추가하는 방안은 2012년 Python Language Summit에서 논의되었으며, 추가하기로 합의되었습니다.
미해결 문제
작성 시점에 최신 버전인 릴리스 0.8부터 mock은 Python 2.4-3.2와 호환됩니다. Python 표준 라이브러리에 포함되면 일부 Python 2 전용 “하위 호환성 핵”을 제거할 수 있습니다.
mock 0.8에서는 “auto-speccing”이라는 새로운 기능이 도입되었으며, “mocksignature”라는 이전 mock 기능은 더 이상 필요하지 않게 되었습니다. “mocksignature” 기능은 포함되기 전에 mock에서 완전히 제거할 수 있습니다.
참고 자료
Copyright
This document has been placed in the public domain.