我在嘲笑 mongodb 时需要帮助。我正在使用mongomock来模拟 mongodb。
我的项目结构是:
-- my_mongo.py
-- code.py
-- my_test.py
my_mongo.py有:
from pymongo import MongoClient
def get_db():
client = MongoClient(os.environ['MONGODB_URI'])
db = client['my_db']
return db
def insert(id, data):
return get_db().results.insert_one(
{
"id": id,
"data":df.to_json(),
}).id
和code.py有
import my_mongo
def action():
#do somethings
my_mongo.insert(id, data)
和my_test.py有
import mongomock
import my_mongo
from unittest import mock
with patch.object(my_mongo.get_db().client, "client", mongomock.MongoClient()):
import code
def test_action_1():
my_mongo.insert = mock.Mock(return_value=1)
code.action()
def test_action_2():
with patch.object(my_mongo.get_db(), "get_db", mongomock.MongoClient().db):
code.action()
它为两个测试抛出 pymongo.errors.ServerSelectionTimeoutError 。所以,它仍然进入 my_mongo.py 中的 insert_one() 方法。我希望在 test_action_1 my_mongo.insert 返回 1,但事实并非如此。
我错过了什么?