Saya tidak bisa mengatakan dengan pasti tanpa melihat konfigurasi pengujian Anda, tetapi saya kira itu berfungsi dengan docker run
dan bukan Testcontainers karena docker run
mengekspos port tetap (selalu 27017) tetapi Testcontainers akan mengekspos port 27017
sebagai port acak (untuk menghindari konflik port pada mesin uji).
Untuk menggunakan Testcontainers dengan pengujian Quarkus, pengujian Anda harus mengikuti alur ini:
- Mulai penampung. Ini diperlukan karena port acak yang terbuka untuk MongoDB hanya dapat diketahui setelah wadah telah dimulai.
-
Dapatkan port acak dari Testcontainers setelah container dimulai, lalu atur properti konfigurasi pengujian apa pun yang bergantung pada port container. Misalnya:
static GenericContainer mongodb = new GenericContainer<>("mongo:4.2").withExposedPorts(27017); static { mongodb.start(); System.setProperty("quarkus.mongodb.connection-string", "mongodb://" + mongodb.getContainerIpAddress() + ":" + mongodb.getFirstMappedPort()); }
- Biarkan Quarkus mulai. Karena Quarkus tidak mendukung konfigurasi dinamis, Anda harus menyetel port MongoDB sebelum Quarkus dimulai.