2016-05-23 2 views
2

Я использую nosetests для кода Python для проверки кода с помощью соединения MongoDB, я использовал стандартную библиотеку python mock с mongoMock: https://github.com/vmalloc/mongomock, я исправил модуль pymongo.MongoClient, чтобы издеваться над этим, но проблема заключается в том, что объект mongoMock не заменяет фактический объект, что означает, что тестовая функция все еще использует фактическое соединение mongoDB.mock mongoDB для теста python unit

Это фактический код:

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 
Смежные вопросы