# typed-pytest: MagicMock에서 잃어버린 IDE 자동완성과 타입 안전성 되찾기

> Clean Markdown view of GeekNews topic #25530. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=25530](https://news.hada.io/topic?id=25530)
- GeekNews Markdown: [https://news.hada.io/topic/25530.md](https://news.hada.io/topic/25530.md)
- Type: news
- Author: [tmdgusya](https://news.hada.io/@tmdgusya)
- Published: 2026-01-03T15:12:23+09:00
- Updated: 2026-01-03T15:12:23+09:00
- Original source: [github.com/tmdgusya](https://github.com/tmdgusya/typed-pytest)
- Points: 2
- Comments: 0

## Topic Body

Pytest로 테스트 코드를 작성하면서 MagicMock을 사용할 때, IDE 자동완성이 안 되거나 메서드 이름을 잘못 적어(오타) 삽질했던 경험이 다들 한두 번씩은 있으실 겁니다.  
  
기존의 mock은 매우 강력하지만, 타입 힌트가 소실되어 mypy나 pyright 같은 타입 검사기의 도움을 받기 어려웠습니다. 이를 해결하기 위해 **타입 안전한 모킹(Type-safe mocking)** 을 지원하는 typed-pytest를 만들었습니다.  
  
주요 특징:  
- 완벽한 IDE 자동완성: 실제 클래스의 메서드 명, 파라미터는 물론 assert_called_once_with 같은 모크 전용 메서드까지 자동 완성을 지원합니다.  
- 린트 타임 오타 탐지: 존재하지 않는 메서드를 호출하거나 인자를 잘못 넣으면 테스트를 실행하기 전(mypy/pyright)에 즉시 잡아냅니다.  
- 전용 스텁(Stub) 생성기: 프로젝트의 클래스를 분석하여 타입 힌트 파일(.pyi)을 자동 생성합니다. (FastAPI, SQLAlchemy 등 외부 의존성이 있는 클래스도 지원)  
- 유연한 백엔드: 빠른 속도를 원할 땐 inspect, 더 정밀한 반환 타입 힌트가 필요할 땐 stubgen 백엔드를 선택할 수 있습니다. (현재 stubgen 은 실험과정에 있습니다)  
  
#### 사용 예시:  
  
```python  
# 기존 MagicMock: 오타가 있어도 실행 전엔 알 수 없음  
mock = MagicMock(spec=UserService)  
mock.get_usr(1) # get_user의 오타지만 린터가 잡지 못함  
  
# typed-pytest: 린터가 즉시 에러 발생 & 자동완성 지원  
from typed_pytest_stubs import typed_mock, UserService  
  
mock = typed_mock(UserService)  
mock.get_usr # ❌ Error: "get_usr" is not a member of UserService  
mock.get_user.assert_called_once_with(user_id=1) # ✅ 타입 체크 완료  
```  
  
생성된 스텁 파일은 Git에 올릴 필요 없이 로컬 개발 환경과 CI에서만 생성하여 사용하도록 설계되었습니다. uv와 같은 최신 도구와의 호환성도 고려되어 있습니다.  
  
GitHub: https://github.com/tmdgusya/typed-pytest  
  
테스트 코드에서도 타입 시스템의 이점을 온전히 누리고 싶은 분들께 도움이 되었으면 좋겠습니다. 사용성 개선 피드백은 언제나 환영합니다!!

## Comments



_No public comments on this page._
