MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Bagaimana cara menguji unit metode yang terhubung ke mongo, tanpa benar-benar terhubung ke mongo?

Ada beberapa jawaban SO terkait dengan kode pengujian unit yang menggunakan MongoDB sebagai penyimpanan data:

  • Mengejek database di node.js?
  • Mock/Uji Basis Data Mongodb Node.js
  • MongoDB tersemat saat menjalankan tes integrasi
  • Mirip:Kelas pengujian unit yang memiliki fungsi online

Saya akan mencoba mengkonsolidasikan solusi ini.

Pembukaan

Pertama dan terpenting, Anda harus ingin MongoDB berjalan saat melakukan pengujian Anda. Bahasa kueri MongoDB rumit, jadi menjalankan kueri yang sah terhadap instans MongoDB yang stabil diperlukan untuk memastikan kueri Anda berjalan sesuai rencana dan aplikasi Anda merespons hasilnya dengan benar. Namun, dengan mengingat hal ini, Anda seharusnya tidak pernah jalankan pengujian Anda terhadap sistem produksi, melainkan sistem periferal ke lingkungan integrasi Anda. Ini dapat berada di mesin yang sama dengan perangkat lunak CI Anda, atau hanya relatif dekat dengannya (dalam hal proses, tidak harus jaringan atau secara geografis).

ENV ini mungkin memiliki tapak rendah dan sepenuhnya berjalan di memori (sumber daya 1) (sumber daya 2), tetapi tidak selalu memerlukan karakteristik kinerja yang sama dengan ENV produksi Anda. (Jika Anda ingin menguji kinerja, ini harus ditangani di lingkungan yang terpisah dari CI Anda.)

Penyiapan

  • Instal mongod layanan khusus untuk CI. Jika repl set dan/atau sharding menjadi perhatian (misalnya menulis masalah, tidak menggunakan $isolated , dll.), dimungkinkan untuk meniru lingkungan berkerumun dengan menjalankan beberapa mongod instance (1 konfigurasi, data 2x2 untuk shard+repl) dan mongos instance pada mesin yang sama dengan beberapa skrip/tweak init.d atau sesuatu seperti buruh pelabuhan.
  • Gunakan konfigurasi khusus lingkungan dalam aplikasi Anda (baik disematkan melalui file .json, atau di beberapa tempat seperti /etc, /home/user/.your-app atau serupa). Aplikasi Anda dapat memuat ini berdasarkan variabel lingkungan simpul seperti NODE_ENV=int . Dalam konfigurasi ini, string koneksi db Anda akan berbeda. Jika Anda tidak menggunakan konfigurasi khusus env, mulailah melakukan ini sebagai sarana untuk mengabstraksi pengaturan runtime aplikasi (yaitu "local", "dev", "int", "pre", "prod", dll.). Saya dapat memberikan sampel berdasarkan permintaan.
  • Sertakan perlengkapan berorientasi pengujian dengan suite aplikasi/pengujian Anda. Seperti disebutkan dalam salah satu pertanyaan terkait, driver Node.js MongoDB mendukung beberapa pustaka pembantu:mongodb-fixtures dan node-database-cleaner . Fixtures menyediakan kumpulan data yang berfungsi dan konsisten untuk pengujian:anggaplah sebagai bootstrap.

Pembuatan/Pengujian

  1. Bersihkan database terkait menggunakan sesuatu seperti node-database-cleaner .
  2. Isi perlengkapan Anda ke dalam database yang sekarang kosong dengan bantuan mongodb-fixtures .
  3. Lakukan pembuatan dan pengujian Anda.
  4. Ulangi.

Di sisi lain...

Jika Anda masih memutuskan bahwa tidak menjalankan MongoDB adalah pendekatan yang benar (dan Anda tidak akan menjadi satu-satunya), kemudian mengabstraksi panggilan penyimpanan data Anda dari driver dengan ORM adalah taruhan terbaik Anda (untuk seluruh aplikasi, bukan hanya pengujian). Misalnya, sesuatu seperti model mengklaim sebagai agnostik basis data, meskipun saya belum pernah menggunakannya. Memanfaatkan pendekatan ini, Anda masih memerlukan perlengkapan dan konfigurasi env , namun Anda tidak perlu menginstal MongoDB. Peringatan di sini adalah bahwa Anda bergantung pada ORM yang Anda pilih.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Apakah MongoDB mendukung tipe floating point?

  2. 3 Langkah Sederhana untuk Membuat Cluster Sharded MongoDB

  3. Apa yang harus saya pilih:MongoDB/Cassandra/Redis/CouchDB?

  4. Asosiasi Banyak-ke-Banyak MongoDB

  5. Mengelola Beberapa Teknologi Basis Data dengan ClusterControl