Pertanyaan saya adalah variasi dari pertanyaan ini .
Karena proyek aplikasi Web Java saya membutuhkan banyak filter / kueri baca dan antarmuka dengan alat seperti GridFS, saya kesulitan memikirkan cara yang masuk akal untuk menggunakan MongoDB dengan cara yang disarankan solusi di atas.
Oleh karena itu, saya sedang mempertimbangkan untuk menjalankan instance MongoDB yang disematkan bersama tes integrasi saya. Saya ingin ini dimulai secara otomatis (baik untuk setiap pengujian atau seluruh rangkaian), bersihkan database untuk setiap pengujian, dan matikan di akhir. Tes ini mungkin dijalankan pada mesin pengembangan serta server CI, jadi solusi saya juga harus portabel .
Adakah orang yang memiliki lebih banyak pengetahuan tentang MongoDB membantu saya mendapatkan gagasan tentang kelayakan pendekatan ini, dan / atau mungkin menyarankan bahan bacaan apa pun yang dapat membantu saya memulai?
Saya juga terbuka untuk saran lain yang mungkin dimiliki orang tentang bagaimana saya dapat mendekati masalah ini ...
sumber
Jawaban:
Berikut adalah versi terbaru (untuk 2019) dari jawaban yang diterima dari @rozky (banyak yang telah diubah di pustaka Mongo dan Embedded MongoDB).
sumber
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS)
bersama dengan perubahan di atasSaya telah menemukan pustaka Embedded MongoDB yang terlihat cukup menjanjikan dan melakukan apa yang Anda minta.
Saat ini mendukung versi MongoDB:
1.6.5
to3.1.6
, asalkan binari masih tersedia dari mirror yang dikonfigurasi.Berikut adalah contoh penggunaan singkat, yang baru saja saya coba dan berfungsi dengan sempurna:
sumber
com.mongodb
Java API resmi sehingga tidak lebih rumit daripada menggunakan API biasa.Ada produk Foursquare Fongo . Fongo adalah implementasi java dalam memori dari mongo. Ini memotong panggilan ke mongo-java-driver standar untuk menemukan, memperbarui, menyisipkan, menghapus, dan metode lainnya. Penggunaan utama adalah untuk pengujian unit ringan di mana Anda tidak ingin memutar proses mongo.
sumber
Jika Anda menggunakan Maven, Anda mungkin tertarik dengan plugin yang saya buat yang membungkus API 'mongo tertanam' flapdoodle.de :
embedmongo-maven-plugin
Ini memberikan
start
tujuan yang dapat Anda gunakan untuk memulai versi apa pun dari MongoDB yang Anda inginkan (misalnya selamapre-integration-test
), danstop
tujuan yang akan menghentikan MongoDB (misalnya selamapost-integration-test
).Manfaat nyata menggunakan plugin ini dibandingkan yang lain adalah tidak ada persyaratan untuk menginstal MongoDB sebelumnya. Biner MongoDB diunduh dan disimpan
~/.embedmongo
untuk versi mendatang.sumber
Jika Anda menggunakan sbt dan specs2, saya menulis jenis pembungkus yang sama untuk embedmongo
https://github.com/athieriot/specs2-embedmongo
sumber
dengan spring-boot 1.3 Anda dapat menggunakan EmbeddedMongoAutoConfiguration
pom.xml
MongoConfig
sumber
Anda dapat menjalankan MongoDB di memori mulai versi 3.2.6. Dari situs :
sumber
Tidak hanya untuk unit testing, tapi juga dijelaskan bagaimana cara menggunakan inmemory mongodb dengan rest api.
ketergantungan maven:
================================================== ===========================
application.properties
================================================== ===========================
UserRepository.java
antarmuka publik UserRepository memperluas MongoRepository {
}
untuk referensi dan semua kode java gunakan tautan di bawah ini: (penjelasan langkah demi langkah)
https://www.youtube.com/watch?v=2Tq2Q7EzhSA&t=7s
sumber
Performa lebih baik saat dijalankan
mongod
denganstorageEngine='ephemeralForTest'
sumber
Dalam produksi, Anda akan menggunakan database yang sebenarnya.
Jika Anda ingin pengujian Anda mencerminkan bagaimana produk Anda berperilaku dalam produksi, gunakan instance Mongo yang sebenarnya.
Penerapan palsu mungkin tidak berperilaku persis sama dengan yang asli. Saat menguji, Anda harus berusaha untuk kebenaran. Kecepatan eksekusi berada di urutan kedua.
sumber