2 poin oleh tmdgusya 2026-01-03 | Belum ada komentar. | Bagikan ke WhatsApp

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 inspect untuk kecepatan, atau backend stubgen bila membutuhkan type hint nilai balik yang lebih presisi. (stubgen saat 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.

Belum ada komentar.