2 puan yazan tmdgusya 2026-01-03 | Henüz yorum yok. | WhatsApp'ta paylaş

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_with gibi 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ğunuzda stubgen backend’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.

Henüz yorum yok.