【问题标题】:How to integrate MongoMock with Pymongo-Flask如何将 MongoMock 与 Pymongo-Flask 集成
【发布时间】:2021-06-10 18:48:01
【问题描述】:
我想为我们的 mongo 代码编写一些单元测试,使用 mongomock 作为后端。但是,Flask-PyMongo 在 Collection 类之上添加了一个便利类 (find_one_or_404),这意味着我不能直接进行 MongoMock 替换。任何尝试将此函数添加到 Collection 类上的尝试似乎都不起作用(我认为它与覆盖的 __getattr__ 有关 - 每次我尝试在 db.collection_name.find_one_or_404({}) 上得到 TypeError: 'Collection' object is not callable)。除了不使用此功能之外,我还有哪些选择?
【问题讨论】:
标签:
python
mongodb
flask
mocking
pytest
【解决方案1】:
没有更好的想法,答案是“一直模拟”
@pytest.fixture
def mock_thing_collection(mocker):
mock_data = Mock()
mock_db = Mock()
mock_db.things = mock_data
mock = mocker.patch("app.mongo")
mock.db = mock_db
return mock_data
然后,在测试中
def test_things(mocker, client, mock_thing_collection):
return_items = ["a", "b", "c"]
find_mock = mocker.patch.object(mock_thing_collection, 'find', return_value=return_items)