MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Làm cách nào để kiểm tra đơn vị một phương thức kết nối với mongo mà không thực sự kết nối với mongo?

Có một số câu trả lời SO liên quan đến mã kiểm tra đơn vị sử dụng MongoDB làm kho lưu trữ dữ liệu:

  • Chế nhạo cơ sở dữ liệu trong node.js?
  • Mock / Test Mongodb Database Node.js
  • Đã nhúng MongoDB khi chạy thử nghiệm tích hợp
  • Tương tự:Các lớp kiểm tra đơn vị có chức năng trực tuyến

Tôi sẽ cố gắng hợp nhất các giải pháp này.

Mở đầu

Trước hết, bạn nên muốn MongoDB chạy trong khi thực hiện các bài kiểm tra của bạn. Ngôn ngữ truy vấn của MongoDB rất phức tạp, vì vậy cần phải chạy các truy vấn hợp pháp đối với phiên bản MongoDB ổn định để đảm bảo các truy vấn của bạn đang chạy theo kế hoạch và ứng dụng của bạn đang phản hồi đúng với kết quả. Tuy nhiên, với suy nghĩ này, bạn không nên không bao giờ chạy thử nghiệm của bạn với hệ thống sản xuất, nhưng thay vào đó là hệ thống ngoại vi với môi trường tích hợp của bạn. Điều này có thể nằm trên cùng một máy với phần mềm CI của bạn hoặc đơn giản là tương đối gần với nó (về quy trình, không nhất thiết phải là mạng hoặc nói theo địa lý).

ENV này có thể có dung lượng thấp và chạy hoàn toàn trong bộ nhớ (tài nguyên 1) (tài nguyên 2), nhưng không nhất thiết phải yêu cầu các đặc tính hiệu suất giống như ENV sản xuất của bạn. (Nếu bạn muốn kiểm tra hiệu suất, việc này phải được xử lý trong một môi trường riêng biệt với CI của bạn.)

Thiết lập

  • Cài đặt mongod dịch vụ dành riêng cho CI. Nếu các bộ repl và / hoặc sharding đáng lo ngại (ví dụ:viết mối quan tâm, không sử dụng $isolated , v.v.), có thể bắt chước môi trường được phân nhóm bằng cách chạy nhiều mongod phiên bản (1 cấu hình, 2x2 dữ liệu cho phân đoạn + repl) và một mongos ví dụ trên cùng một máy với một số tập lệnh / chỉnh sửa init.d hoặc thứ gì đó như docker.
  • Sử dụng các cấu hình dành riêng cho môi trường trong ứng dụng của bạn (được nhúng qua tệp .json hoặc ở một số nơi như / etc, /home/user/.your-app hoặc tương tự). Ứng dụng của bạn có thể tải những thứ này dựa trên biến môi trường nút như NODE_ENV=int . Trong các cấu hình này, chuỗi kết nối db của bạn sẽ khác nhau. Nếu bạn không bằng cách sử dụng các cấu hình dành riêng cho env, hãy bắt đầu thực hiện việc này như một phương tiện để tóm tắt cài đặt thời gian chạy của ứng dụng (tức là "cục bộ", "dev", "int", "pre", "prod", v.v.). Tôi có thể cung cấp mẫu theo yêu cầu.
  • Bao gồm các thiết bị định hướng thử nghiệm với ứng dụng / bộ thử nghiệm của bạn. Như đã đề cập trong một trong những câu hỏi được liên kết, trình điều khiển Node.js của MongoDB hỗ trợ một số thư viện trợ giúp:mongodb-fixturesnode-database-cleaner . Các thiết bị cung cấp tập dữ liệu hoạt động và nhất quán để thử nghiệm:hãy nghĩ về chúng như một chương trình khởi động.

Bản dựng / Thử nghiệm

  1. Làm sạch cơ sở dữ liệu được liên kết bằng cách sử dụng một cái gì đó như node-database-cleaner .
  2. Đưa đồ đạc của bạn vào cơ sở dữ liệu hiện đang trống với sự trợ giúp của mongodb-fixtures .
  3. Thực hiện bản dựng và thử nghiệm của bạn.
  4. Lặp lại.

Mặt khác ...

Nếu bạn vẫn quyết định rằng không chạy MongoDB là cách tiếp cận chính xác (và bạn sẽ không phải là người duy nhất), sau đó việc trừu tượng hóa các lệnh gọi trong kho dữ liệu của bạn từ trình điều khiển bằng ORM là cách tốt nhất của bạn (cho toàn bộ ứng dụng, không chỉ thử nghiệm). Ví dụ:một cái gì đó như model tuyên bố là bất khả tri cơ sở dữ liệu, mặc dù tôi chưa bao giờ sử dụng nó. Bằng cách sử dụng phương pháp này, bạn sẽ vẫn yêu cầu đồ đạc cấu hình env , tuy nhiên bạn không bắt buộc phải cài đặt MongoDB. Lưu ý ở đây là bạn phải tuân theo ORM mà bạn chọn.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. nhiều phiên bản của Mongo DB trên cùng một máy chủ

  2. Sử dụng .sort với PyMongo

  3. Trình điều khiển C # cho MongoDb:làm thế nào để sử dụng giới hạn + số lượng?

  4. MongoDB $ tồn tại

  5. Có chức năng tầng nào trong khung tổng hợp Mongodb không?