Pytest-mock 未修补 class 模块中的导入函数

Pytest-mock not patching imported function in class module

pytest-mock 补丁没有按预期工作。我的代码:

utils.py:

def my_func():
    return 42

classes.py:

from utils import my_func

class MyClass:
    def class_method(self):
        return my_func()

test_classes.py:

import pytest
from classes import MyClass

def test_myclass(mocker):
    mocker.patch("utils.my_func", return_value=21)
    assert MyClass().class_method() == 21

这失败了,return 是 42 而不是 21

解决方法是在测试中更改补丁。而不是

mocker.patch("utils.my_func", return_value=21)

mocker.patch("classes.my_func", return_value=21)

因为 classes.py 中的这一行:from .utils import my_func.