Testing Strategy - Lumina-Enterprise-Solutions/prism-notification-service GitHub Wiki

๐Ÿงช Testing Strategy

Pengujian adalah bagian integral dari siklus pengembangan prism-notification-service untuk memastikan keandalan, keamanan, dan kebenaran fungsional. Kami membagi pengujian menjadi dua kategori utama: Unit Tests dan Integration Tests.

Unit Tests

  • Tujuan: Menguji komponen individual (satu fungsi atau satu struct) secara terisolasi tanpa dependensi eksternal.
  • Lokasi: File tes dengan akhiran _test.go di direktori yang sama dengan kode yang diuji (misalnya, auth_handler_test.go menguji auth_handler.go).
  • Ciri-ciri:
    • Sangat cepat untuk dijalankan.
    • Tidak memerlukan database, Redis, atau layanan lain.
    • Semua dependensi eksternal di-mock menggunakan library seperti testify/mock.
  • Cara Menjalankan:
    make test
    
    Perintah ini menjalankan go test -v -short ./..., yang secara spesifik hanya menargetkan tes yang ditandai sebagai "short" dan tidak memerlukan setup yang rumit.

Integration Tests

  • Tujuan: Menguji interaksi antara beberapa komponen, terutama antara lapisan layanan (service) dengan dependensi nyata seperti database PostgreSQL dan Redis.
  • Lokasi: Terutama di dalam paket internal/repository. File main_test.go di paket ini bertanggung jawab untuk menyiapkan koneksi database sebelum tes dijalankan.
  • Ciri-ciri:
    • Lebih lambat karena melibatkan I/O jaringan ke database.
    • Memerlukan kontainer Docker untuk PostgreSQL dan Redis yang sedang berjalan.
    • Memvalidasi query SQL dan logika repositori terhadap skema database yang sebenarnya.
  • Cara Menjalankan:
    1. Pastikan seluruh tumpukan layanan berjalan melalui make up dari direktori root.
    2. Jalankan perintah berikut dari direktori services/prism-auth-service:
      make test-integration
      
    Perintah ini menjalankan skrip scripts/test-integration.sh yang:
    • Mengekspor variabel lingkungan yang diperlukan (POSTGRES_HOST, REDIS_ADDR, dll.) agar tes dapat terhubung ke kontainer Docker yang benar.
    • Menjalankan go test -v ./... tanpa flag -short, sehingga semua tes (unit dan integrasi) dieksekusi.
    • Menggunakan TestMain di repository/main_test.go untuk membuat koneksi ke database dan menerapkan skema sebelum menjalankan tes di paket tersebut.

Kembali ke Halaman Utama