簡體   English   中英

用於python單元測試的mock mongoDB

[英]mock mongoDB for python unit test

我正在使用nosetests for Python代碼來測試使用MongoDB連接的代碼,我使用了mongoMock的python mock標准庫: https//github.com/vmalloc/mongomock ,我修補了pymongo.MongoClient模塊來模擬它,但問題是mongoMock對象不替換實際對象,這意味着測試函數仍然使用實際的mongoDB連接。

這是實際的代碼:

def post_data():

    connection = MongoClient('mongodb://localhost:27017/').customers.review
    post = {"author": "Mike",
    "text": "My first blog post!",
    "tags": ["mongodb", "python", "pymongo"],
    "votes":1}
    print connection

    connection.insert_one(post)

測試功能:

@mock.patch('pymongo.MongoClient')

def test_post_data(mock_MongoClient):

    mock_MongoClient.return_value= mongomock.MongoClient().db.collection

    post_data()

當我運行測試時,代碼仍然插入真實數據庫,代碼打印實際連接! 請問,它有什么問題以及如何正確地做到這一點?

提前致謝!

我解決了這個問題,這對我來說很棘手,因為實際的代碼和測試代碼沒有任何問題,只是模擬對象沒有被實際調用,因為當我做@ mock.patch時,我提到了這個模塊@mock.patch'pymongo.MongoClient'這就是我應該通過寫作創建連接的原因

connection = pymongo.MongoClient('mongodb://localhost:27017/').customers.review

而不是寫作

connection = MongoClient('mongodb://localhost:27017/').customers.review

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM