pytest-mock-从模块模拟功能

An *_*yen 5 python pytest

我的模块中有一个实用程序engine.py,它是从另一个文件导入的:

from main.utils.string import get_random_string

def generate_random_string():
    return get_random_string()
Run Code Online (Sandbox Code Playgroud)

在我的测试文件中:

def test_generate_random_string(mocker):
    mocker.patch('main.utils.string.get_random_string', return_value='123456')
Run Code Online (Sandbox Code Playgroud)

但是,string.get_random_string除非我将其更改engine.py为:否则,它仍在尝试使用真正的实现代替我创建的模拟,

from main.utils import string

def generate_random_string():
    return string.get_random_string()
Run Code Online (Sandbox Code Playgroud)

如何在不导入整个string模块的情况下实现模拟部分engine.py

An *_*yen 7

通过更改mocker.patch('main.utils.string.get_random_string', return_value='123456')为,我已经成功实现了目标mocker.patch('engine.get_random_string', return_value='123456')

详细信息可以在这里找到。