네트워크·파일·DB·시간 같은 외부 경계는 느리거나 흔들리고 부작용도 있어. 목은 테스트 동안 그 경계를 정해 둔 응답으로 바꾸고 호출을 기록해, 대상 함수의 관찰 가능한 행동만 빠르고 결정적으로 검사하게 해.
Mock()은 호출과 속성 접근을 기록하고, patch는 대상 코드가 실행되는 동안 이름을 바꿔. 핵심은 정의된 곳이 아니라 조회하는 곳을 바꾸는 거야. from requests import get을 실행한 my_module은 requests.get이 아니라 my_module.get을 바꿔야 해. pytest의 monkeypatch도 setattr·setenv와 자동 정리를 제공해.
내부 호출 순서를 모조리 흉내 내면 구현을 시험하는 목 시험이 돼. 프로세스 밖의 계약과 실패만 가짜로 만들고, 코드 안의 작은 협력 객체는 실제로 돌리는 편이 리팩터링에도 강해.