我有连接到 MongoDB 客户端的代码,我正在尝试对其进行测试。为了测试,我不想连接到实际的客户端,所以我试图找出制作一个用于测试目的的假客户端。代码的基本流程是我在某处有一个函数来创建一个pymongo客户端,然后查询它并制作一个在其他地方使用的字典。
我想使用 pytest 编写一些测试来测试将调用get_stuff. 我的问题是get_stuff调用mongo()实际上是连接到数据库的原因。我试图只是使用pytest.fixture(autouse=True)和mongomock.MongoClient()替换mongo().
但这并不能取代mongo_stuff.mongo(). 有什么方法可以告诉 pytest 替换一个函数,以便fixture调用我的函数而不是实际函数?我认为使fixture我的测试mongo()在命名空间中的优先级高于实际模块中的函数。
这是我的示例的示例文件结构:
.
??? project
? ??? __init__.py
? ??? mongo_stuff
? ? ??? __init__.py
? ? ??? mongo_stuff.py
? ??? working_class
? ??? __init__.py
? ??? somewhere_else.py
??? testing
??? __init__.py
??? test_stuff.py
Run Code Online (Sandbox Code Playgroud)
mongo_stuff.py
import pymongo
def mongo():
return pymongo.MongoClient(connection_params)
def get_stuff():
db = mongo() # Makes …Run Code Online (Sandbox Code Playgroud)