我是python mock中的新手,最近我試圖爲我的函數編寫測試代碼。 該函數用於分析Mongo數據庫和CSV報告。我想修補「get_collection()」函數。該結構是這樣的:模擬補丁函數
mongo_report.py文件:
import pymongo
def get_collection(): # used to get mongo collection
def from_report(): #used to from a report
get_collection(mongodb, mongo_collection_name)
.....
在我的測試文件:
from mongo_report import from_report
from mock import Mock, patch
def mock_get_collection(): # used to replace get_collection()
mocked_collection = Mock()
mock_get_collection.count.side_effect = [20, 6, 2]
mock_get_collection.find.side_effect = [{user: xx}]
return mocked_collection
@patch('mongo_report.get_collection')
def mongo_report_test(mock_call):
mock_call.return_value = mock_get_collection()
from_report()
補丁是由什麼我在網頁上了解到書面https://blog.fugue.co/2016-02-11-python-mocking-101.html
但沒有工作。所以我的問題是:
這是使用補丁的正確方法,如果不是,我該如何補丁?
在mongo_report_test(mock_call),哪裏是mock_call從何而來,它不掛任何東西在這裏,我怎麼可以聲明其
補丁後,我怎麼能叫這個測試功能?
從裝飾師開始學習,花了整整一天,我的頭撞到桌子上,但仍然沒有學到這個把戲。 :<
這看起來像一個有點迂迴的方式做到這一點,但它看上去是可行的我。 (你在'mock_get_collection'中使用'side_effect'看起來有點可疑,否則......)你能更清楚地解釋一下你的意思是「它沒有工作」嗎? – mgilson
我想我的意思是我不知道如何打補丁後給他們打電話。當我調用mongo_report_test時,我需要傳遞「mock_call」參數,對吧,但是真正的mock_call是什麼?我不明白。它是另一個「mock_call = Mock()」嗎? –