Pytest Monkeypatch不适用于烧瓶视图功能

时间:2020-02-08 22:58:34

标签: python unit-testing flask pytest

假设我们有以下Flask视图功能要测试。具体来说,我们想在create_foo()写入文件系统时对其进行模拟。

# proj_root/some_project/views.py
from some_project import APP
from some_project.libraries.foo import create_foo

@APP.route('/run', methods=['POST']
def run():
    bar = create_foo()
    return 'Running'

现在,我们要为run()编写单元测试,并模拟create_foo()的调用,以避免创建不必要的文件。

# proj_root/tests/test_views.py
from some_project import some_project

@pytest.fixture
def client():
    some_project.APP.config['TESTING'] = True
    with some_project.APP.test_client() as client:
        yield client

def test_run(client, monkeypatch):
    monkeypatch.setattr('some_project.libraries.foo.create_foo', lambda: None)
    response = client.post('/run')
    assert b'Running' in response.data

即使命名的create_foo导入似乎也可以使用这种方法。测试全部通过,但是每次运行测试套件时,create_foo的原始代码显然会在文件系统中创建新文件时执行。我想念什么?我怀疑这与基于一些相关问题的命名导入有关,但我不确定。

1 个答案:

答案 0 :(得分:2)

好吧,我实际上在发布后不久就找到了答案。正确的Monkeypatch是:

monkeypatch.setattr('some_project.views.create_foo', lambda: None)

here对此原因进行了很好的解释。

相关问题