typed-pytest: Mengembalikan auto-complete IDE dan keamanan tipe yang hilang di MagicMock
(github.com/tmdgusya)Saat menulis kode pengujian dengan Pytest dan menggunakan MagicMock, banyak dari kita pasti pernah mengalami IDE tidak memberikan auto-complete atau harus membuang waktu karena salah mengetik nama metode.
Mock yang ada selama ini memang sangat kuat, tetapi type hint ikut hilang sehingga sulit memanfaatkan bantuan type checker seperti mypy atau pyright. Untuk mengatasi hal ini, dibuatlah typed-pytest yang mendukung type-safe mocking.
Fitur utama:
- Auto-complete IDE yang lengkap: mendukung auto-complete untuk nama metode dan parameter dari kelas asli, termasuk metode khusus mock seperti assert_called_once_with.
- Deteksi typo saat lint time: jika memanggil metode yang tidak ada atau memberikan argumen yang salah, kesalahan dapat langsung terdeteksi sebelum test dijalankan (oleh mypy/pyright).
- Generator stub khusus: menganalisis kelas dalam proyek dan secara otomatis membuat file type hint (.pyi). (Juga mendukung kelas dengan dependensi eksternal seperti FastAPI, SQLAlchemy, dll.)
- Backend yang fleksibel: pilih
inspectuntuk kecepatan, atau backendstubgenbila membutuhkan type hint nilai balik yang lebih presisi. (stubgensaat ini masih dalam tahap eksperimen)
Contoh penggunaan:
# MagicMock biasa: typo tidak akan diketahui sebelum dijalankan
mock = MagicMock(spec=UserService)
mock.get_usr(1) # typo dari get_user, tetapi tidak terdeteksi linter
# typed-pytest: linter langsung memunculkan error & auto-complete tersedia
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) # ✅ type check selesai
File stub yang dihasilkan dirancang agar tidak perlu di-commit ke Git, melainkan cukup dibuat dan digunakan di lingkungan pengembangan lokal serta CI. Kompatibilitas dengan tool modern seperti uv juga telah dipertimbangkan.
GitHub: https://github.com/tmdgusya/typed-pytest
Semoga ini membantu bagi siapa pun yang ingin menikmati manfaat penuh sistem tipe bahkan di kode pengujian. Masukan untuk peningkatan usability selalu diterima!!
Belum ada komentar.