2016-05-23 158 views
2

我使用nosetests的Python代碼來測試與MongoDB連接的代碼,我已經用mongoMock python模擬標準庫:https://github.com/vmalloc/mongomock,我修補了pymongo.MongoClient模塊來模擬它,但問題是mongoMock對象不替代實際的對象,這意味着測試功能依然採用實際的MongoDB連接。模擬mongoDB python單元測試

這是實際的代碼:

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() 

當我運行測試的代碼纔是真正的數據庫上仍然插入和代碼打印的實際連接! ! 請,有什麼不妥之處,如何正確地做到這一點?

在此先感謝!

回答

2

我解決了這個問題,這對我來說是棘手的,因爲實際的代碼和測試代碼進行工作沒有任何問題,只是模擬對象沒有被實際調用,因爲當我做@ mock.patch我要提該模塊 @mock.patch'pymongo.MongoClient'這就是爲什麼我要創建寫

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

,而不是寫

connection = MongoClient('mongodb://localhost:27017/').customers.review 
我的連接