2013-04-10 9 views
15

Tôi phải triển khai thực hiện các mã nosetests cho mã Python bằng cách sử dụng một kho lưu trữ MongoDB. Có thư viện python nào cho phép tôi khởi tạo một máy chủ giả lập trong bộ nhớ MongoDB không?Sử dụng máy chủ giả MongoDB để kiểm tra đơn vị

Tôi đang sử dụng tích hợp liên tục. Vì vậy, tôi muốn các thử nghiệm của mình độc lập với bất kỳ máy chủ chạy MongoDB nào. Có cách nào để giả định máy chủ MongoDM trong bộ nhớ để kiểm tra mã độc lập với kết nối với máy chủ Mongo không?

Cảm ơn trước!

Trả lời

11

Bạn có thể thử: https://github.com/vmalloc/mongomock, nhằm mục đích là một thư viện nhỏ để mô phỏng các đối tượng thu thập pymongo cho mục đích thử nghiệm.

Tuy nhiên, tôi không chắc chắn rằng chi phí chỉ chạy mongodb sẽ bị cấm so với việc đảm bảo một số thư viện nhại là tính năng hoàn chỉnh.

+7

sẽ rất tuyệt khi có được một ví dụ về cách mongoengine và mongomock có thể chơi độc đáo với nhau. – badgley

+0

Đảm bảo bạn có khả năng tương thích tốt với các phiên bản sau 3.0. Tôi thất bại trong việc chế nhạo các bộ sưu tập của mình với tất cả các khung công tác mà tôi đã thử ngay lập tức sau khi tôi nâng cấp máy chủ và trình điều khiển (pymongo) –

4

Tôi không biết về Python, nhưng tôi có mối quan tâm tương tự với C#. Tôi quyết định chỉ chạy một thực thể của Mongo trên máy trạm của tôi chỉ vào một thư mục trống. Nó không tuyệt vời vì mã không bị cô lập nhưng nó nhanh và dễ dàng.

Chỉ lớp truy cập dữ liệu thực sự gọi là Mongo trong khi thử nghiệm. Phần còn lại có thể dựa vào mocks của lớp truy cập dữ liệu. Tôi không cảm thấy như giả mạo Mongo là giá trị nỗ lực khi thực sự tôi muốn xác minh sự tương tác với Mongo là chính xác anyway.

+4

+1 Tôi không hiểu mong muốn kiểm tra mọi thứ riêng biệt. Điều tốt nhất bạn có thể hy vọng là nó hoạt động giống như thật. Chỉ cần kiểm tra thực tế. Cấu hình một cơ sở dữ liệu thử nghiệm chuyên dụng. – Leopd

+3

Đó là một điểm hợp lệ, nhưng một lý do để thử nghiệm riêng biệt là bạn có thể dễ dàng đưa nó cho người khác để họ có thể kiểm tra trong môi trường của họ. Điều đó trở nên nguy hiểm hơn (mặc dù nó có thể đáng giá trong trường hợp này) nếu họ cũng phải thiết lập một quy trình bên ngoài. –

+0

Và để thêm vào đó nếu các bài kiểm tra có nghĩa là để chạy trong đường ống bạn không thể chắc chắn rằng bạn sẽ có DB được cài đặt. – sri85

1

Bạn có thể sử dụng Ming có thay thế kết nối mongo db pymongo trong bộ nhớ.

import ming 
mg = ming.create_datastore('mim://') 
mg.conn # is the connection 
mg.db # is a db with no name 
mg.conn.somedb.somecol 
# >> mim.Collection(mim.Database(somedb), somecol) 
col = mg.conn.somedb.somecol 
col.insert({'a': 1}) 
# >> ObjectId('5216ac3fe0323a1218f4e9aa') 
col.find().count() 
# >> 1 
+0

Giống như trên. Tôi đã thử ming với MongoDB => 3.0 và thất bại hầu hết các lần vì ming không có nghĩa là cho việc này. Nó ngày càng không đáng tin cậy miễn là độ phức tạp tăng lên. –

+0

@ HéctorValverdePareja bạn đang cố gắng làm điều đó là gì? Như bạn có thể thấy từ đoạn mã, chèn và tìm công việc tốt. – Pykler

+0

Xin lỗi, khi tôi nói 'ở trên' tôi có nghĩa là nhận xét tôi đã thêm vào câu trả lời được phê duyệt. Đó là về khả năng tương thích. Ming không hỗ trợ phiên bản mới nhất của pymongo (sau này là 3.0), ví dụ hàm "insert_one()" thay vì "insert()" không được hỗ trợ bởi Ming (hoặc không phải là 2 - 3 tháng trước khi tôi đang chơi với nó. –