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에서 흔히 필요한 일입니다. 많은 개발자가 테스트 스위트에서 필요할 때마다 임시방편으로 모의 객체를 만듭니다. 현재 Python 테스트 스위트에서도 이렇게 하고 있으며, 표준화된 mock 객체 라이브러리가 있으면 도움이 될 것입니다.
Python에서 사용할 수 있는 mock 객체 라이브러리는 많습니다 [2]. 그중 mock은 압도적으로 가장 인기가 많으며, PyPI 다운로드 수가 다른 모의 객체 라이브러리를 모두 합친 것과 맞먹습니다.
mock의 장점은 프레임워크가 아니라 모의 객체 라이브러리라는 점입니다. mock은 테스트 작성 방식을 강요하지 않으면서도 설정할 수 있고 유연한 모의 객체를 제공합니다. mock API는 이제 실전에서 충분히 검증되었으며 안정적입니다.
mock은 또한 테스트 범위 안에서 객체를 안전하게 몽키패치하고 그 몽키패치를 되돌리는 일도 처리합니다. 이 작업은 안전하게 하기 어려우며, 많은 개발자와 프로젝트가 이 기능을 (대개 잘못된 방식으로) 흉내 내고 있습니다. 디스크립터 프로토콜 등이 있는 상황에서 패치의 복잡성을 처리하며 이 작업을 수행하는 표준화된 방법이 있으면 유용합니다. 사람들은 unittest에 “패치” [3] 기능을 추가해 달라고 요청하고 있습니다. 이 기능의 일부를 unittest에 다시 구현하는 것보다 mock.patch를 통해 제공하는 편이 바람직합니다.
배경
Python 표준 라이브러리에 mock을 추가하는 안건은 Python 언어 서밋(Python Language Summit) 2012에서 논의되어 합의되었습니다.
미해결 문제
이 글을 쓰는 시점의 최신 릴리스인 0.8 기준으로, mock은 Python 2.4-3.2와 호환됩니다. Python 표준 라이브러리로 옮기면 Python 2 전용 “호환성 핵(hack)” 일부를 제거할 수 있습니다.
mock 0.8에서 새로 도입된 “auto-speccing” 기능으로 인해 “mocksignature”라는 기존 mock 기능은 더 이상 필요하지 않게 되었습니다. “mocksignature” 기능은 표준 라이브러리에 포함하기 전에 mock에서 완전히 제거할 수 있습니다.
참고 문헌
Copyright
This document has been placed in the public domain.