如何解决用pytest和mongodb进行Monkeypatching
我具有以下目录体系结构:
-api
--services,interfaces,controller
-tests
--test files,conftest
比赛看起来像这样:
# create flask server
@pytest.yield_fixture
def app():
app = create_app(env="testing")
return app
@pytest.yield_fixture
def client(app):
return app.test_client()
# mock MongoDB database connection object using mongomock
@pytest.fixture(scope="function")
def mongo_db_connection_mock(monkeypatch):
db_conn = mongomock.MongoClient()
return db_conn
在测试中,我试图修补一些功能:
@pytest.mark.parametrize(
"input,output,iteration",[
([1,2,3],4,0),([],None,1)
],)
def test_func(
mocker,mongo_db_connection_mock,input,conftest_pytest_fixture
):
path = services_relative_path + ".fetch_mongo_connection"
mocker.patch(path,return_value=mongo_db_connection_mock)
path = services_relative_path + ".read_from_mongo"
mocker.patch(path,return_value=conftest_pytest_fixture[iteration])
result = target_func(input)
assert result = output
conftest_pytest_fixture是在conftest中声明的pytest固定装置,如下所示:
def generate_emails():
emails = [faker.email() for item in range(2)]
return emails
但是,我的功能没有得到修补。我没有从修补的功能。在mongodb中使用pytest的正确方法应该是什么?
到目前为止,我唯一得到的帮助是:Using a fake mongoDB for pytest testing
正在使用monkeypatch.setattr()
的地方,这对我也不起作用:
def test_func(
mocker,conftest_pytest_fixture
):
def fake_mongo():
return mongo_db_connection_mock
def fake_fetch(mongo_client,db,collection,query):
return conftest_pytest_fixture[iteration]
path = services_relative_path + ".fetch_mongo_connection"
monkeypatch.setattr(path,fake_mongo)
path = services_relative_path + ".read_from_mongo"
monkeypatch.setattr(path,fake_fetch)
result = target_func(input)
assert result = output
在两种情况下,测试都能成功运行,但修补后的方法不返回任何内容。在第二种情况下,使用monkeypatch.setattr()
,函数本身(fetch_mongo_connection()
和read_from_mongo()
)似乎可以运行,但是返回的值未在前面使用(或者未进行修补)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。