4 poin oleh GN⁺ 2024-02-28 | 1 komentar | Bagikan ke WhatsApp
  • Framework open source yang menyediakan database, message broker, web browser, dan lainnya yang dapat dijalankan di dalam kontainer Docker
  • Tidak memerlukan konfigurasi lingkungan yang rumit atau objek tiruan (mock); dependensi pengujian didefinisikan lewat kode, dan saat pengujian dijalankan kontainer akan dibuat lalu dihapus
  • Mendukung berbagai bahasa dan framework pengujian, dan bisa langsung dimulai selama ada Docker
  • Modul: menguji apa pun yang bisa dikontainerkan
    • Lebih dari 50 modul untuk menguji berbagai komponen seperti database, message broker, dan lainnya.
  • Bahasa yang didukung: tersedia implementasi Testcontainers untuk banyak bahasa populer seperti Java, Go, .NET, Node.js, Python, Rust, Haskell, Ruby, Clojure, dan Elixir.

Contoh penggunaan: bagaimana Testcontainers dapat membantu

  • Pengujian integrasi lapisan akses data: menguji kode lapisan akses data menggunakan instance database yang dikontainerkan
  • Pengujian UI/penerimaan: menjalankan pengujian UI otomatis menggunakan web browser dalam kontainer yang kompatibel dengan Selenium
  • Pengujian integrasi aplikasi: menjalankan aplikasi dalam mode pengujian jangka pendek dengan dependensi seperti database, antrean pesan, dan server web untuk menyediakan lingkungan pengujian eksploratif dengan interaksi yang kaya

Opini GN⁺

  • Testcontainers membantu pengembang melakukan pengujian dalam kondisi yang mirip dengan lingkungan nyata, sehingga berkontribusi pada peningkatan kualitas perangkat lunak.
  • Pengujian dengan dependensi nyata dapat memberikan hasil yang lebih akurat dibandingkan penggunaan objek tiruan, tetapi pada sistem yang kompleks pengaturan dan pengelolaannya bisa menjadi sulit.
  • Proyek lain yang menyediakan fungsi serupa dengan Testcontainers antara lain Docker Compose dan Kubernetes Minikube, yang juga dapat dimanfaatkan sebagai alat bantu pengujian di lingkungan pengembangan.
  • Saat mengadopsi Testcontainers, diperlukan pemahaman tentang Docker, dan mungkin dibutuhkan pengetahuan teknis mengenai pengelolaan kontainer serta konfigurasi jaringan.
  • Keuntungan utama dari pemilihan teknologi ini adalah konsistensi antara lingkungan pengembangan dan pengujian serta meningkatnya keandalan pengujian, sementara ketergantungan pada lingkungan Docker dan kompleksitas terkait dapat menjadi kekurangannya.

1 komentar

 
GN⁺ 2024-02-28
Komentar Hacker News
  • Ringkasan komentar pertama:

    • Tidak menyangka akan ada pujian sebesar itu untuk Testcontainers.
    • Ini bisa terlihat menarik jika datang dari lingkungan yang sebelumnya tidak menggunakan Docker.
    • Berguna untuk banyak kasus penggunaan, tetapi sulit dibuat agar bekerja baik dengan workflow terkontainerisasi lainnya.
    • Testcontainers adalah library yang menggunakan pemanggilan shell kustom ke Docker CLI sebagai fungsi inti, yang menimbulkan masalah dan kompleksitas saat memperkenalkan workflow terkontainerisasi lain.
    • Cenderung berasumsi bahwa ia hanya berjalan di mesin host dan tidak ada pekerjaan terkait Docker lain, sehingga sering kali bisa sama buruknya atau bahkan lebih buruk daripada library non-Docker.
  • Ringkasan komentar kedua:

    • Testcontainers adalah game changer untuk integration test.
    • Menyediakan API Docker per bahasa sehingga container dapat dijalankan dengan mudah dan kesiapan koneksinya bisa diperiksa.
    • Menggunakan Testcontainers untuk integration test di semua proyek baru.
    • Konfigurasi CI mencakup linting, build, unit test, dan integration test menggunakan Testcontainers.
    • Binding per bahasa menyediakan fungsi helper yang berguna untuk pekerjaan terkait database.
  • Ringkasan komentar ketiga:

    • Tidak memahami mengapa menggunakan docker-compose.yml tidak lebih baik.
    • Testcontainers relatif lemah ketika ada dependensi kompleks antar-container yang dibutuhkan.
    • Pernah mencobanya sekitar 5 tahun lalu, tetapi mungkin sekarang keadaannya sudah jauh lebih baik.
  • Ringkasan komentar keempat:

    • Sangat menghargai integration test yang menggunakan database/Elasticsearch/Redis/Varnish sungguhan.
    • Testcontainers menangani hal-hal seperti membuat indeks Elasticsearch baru selama test suite dan mematikannya setelah selesai.
    • Lebih menyukai strategi yang mencakup sebanyak mungkin fungsi aplikasi dengan pengujian gaya integrasi end-to-end.
    • Hanya menggunakan unit test untuk bagian kode yang memiliki pasangan input/output yang jelas, dan menggunakan mock untuk hal-hal seperti pemanggilan API eksternal yang tidak bisa dikendalikan.
  • Ringkasan komentar kelima:

    • Menulis conex, yaitu Testcontainers untuk bahasa Go, sekitar 7 tahun lalu.
    • Menyediakan integrasi kelas satu dengan framework testing resmi Go.
  • Ringkasan komentar keenam:

    • Ada pendapat bahwa menyediakan instance browser baru dan bersih untuk setiap test itu lambat.
    • Jika sudah berinvestasi di dunia container, menerima beberapa container tambahan adalah hal yang masuk akal.
    • Jika tidak, manfaatnya kecil dibanding kompleksitas atau beban tambahan yang muncul.
  • Ringkasan komentar ketujuh:

    • Melihat Testcontainers lalu membuat versi sendiri.
    • Docker adalah abstraksi yang banyak bocornya, dan pengujian perlu dijalankan di berbagai lingkungan.
    • Networking benar-benar berbeda di Mac, Linux VM, dan di dalam container Docker pada Linux VM dengan socket Docker di-mount.
    • Ingin menjalankan test secara paralel dan menampilkan log yang sesuai untuk tiap test.
    • Tidak yakin apakah Testcontainers sudah menyelesaikan masalah-masalah ini, tetapi menyadari bahwa detail-detail kecil sangat menentukan.
  • Ringkasan komentar kedelapan:

    • Membuat lingkungan test lokal dengan docker-compose.
    • Testcontainers tampak seperti abstraksi bahasa pemrograman untuk mendefinisikan lingkungan Docker tanpa harus mempelajari sintaks Docker Compose.
    • Tetap perlu memahami networking Docker, dependensi, dan health check untuk mengetahui apakah lingkungan test sudah siap digunakan.
  • Ringkasan komentar kesembilan:

    • Tidak perlu mock atau konfigurasi lingkungan yang rumit.
    • Dependensi test didefinisikan dalam kode, lalu saat test dijalankan container akan dibuat dan dihapus.
    • Menganggap bahwa bisa menjalankan integration test dengan container berarti unit test tidak lagi diperlukan adalah sebuah kesalahpahaman.
    • Menyiapkan container Docker itu sederhana, tetapi menjalankannya menyakitkan dan lambat.
  • Ringkasan komentar kesepuluh:

    • Pertanyaan tentang penggunaan Duke sebagai logo Java.