typed-pytest: MagicMock’ta kaybolan IDE otomatik tamamlama ve tip güvenliğini geri kazanmak
(github.com/tmdgusya)Pytest ile test kodu yazarken MagicMock kullandığınızda, IDE otomatik tamamlamanın çalışmaması ya da metot adını yanlış yazıp (yazım hatası) gereksiz yere uğraşmış olmanız muhtemelen hepinizin en az bir kez yaşadığı bir deneyimdir.
Mevcut mock yapısı çok güçlü olsa da, tip ipuçları kaybolduğu için mypy veya pyright gibi tip denetleyicilerinin yardımını almak zordu. Bunu çözmek için tip güvenli mocklama (Type-safe mocking) destekleyen typed-pytest’i geliştirdim.
Başlıca özellikler:
- Kusursuz IDE otomatik tamamlama: Gerçek sınıfın metot adları ve parametrelerinin yanı sıra
assert_called_once_withgibi mock’a özel metotlar için de otomatik tamamlama sunar. - Lint aşamasında yazım hatası yakalama: Var olmayan bir metodu çağırır veya argümanları yanlış verirseniz, testi çalıştırmadan önce (mypy/pyright) bunu anında yakalar.
- Özel stub oluşturucu: Projedeki sınıfları analiz ederek tip ipucu dosyalarını (
.pyi) otomatik üretir. (FastAPI, SQLAlchemy gibi dış bağımlılıkları olan sınıfları da destekler) - Esnek backend: Hız istediğinizde
inspect, daha hassas dönüş tipi ipuçlarına ihtiyaç duyduğunuzdastubgenbackend’ini seçebilirsiniz. (stubgenşu anda deneysel aşamadadır)
Kullanım örneği:
# Mevcut MagicMock: yazım hatası olsa bile çalıştırmadan önce fark edilemez
mock = MagicMock(spec=UserService)
mock.get_usr(1) # get_user için bir yazım hatası ama linter bunu yakalayamaz
# typed-pytest: linter anında hata verir ve otomatik tamamlama desteklenir
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) # ✅ tip denetimi tamam
Oluşturulan stub dosyaları Git’e yüklenmek zorunda olmadan, yalnızca yerel geliştirme ortamında ve CI’da üretilip kullanılacak şekilde tasarlanmıştır. uv gibi modern araçlarla uyumluluk da göz önünde bulundurulmuştur.
GitHub: https://github.com/tmdgusya/typed-pytest
Test kodunda da tip sisteminin avantajlarından tam olarak yararlanmak isteyenler için faydalı olmasını umuyorum. Kullanılabilirliği iyileştirmeye yönelik geri bildirimlere her zaman açığım!!
Henüz yorum yok.