为什么mock.patch在尝试模拟函数时不起作用

问题描述 投票:0回答:1

该项目的结构是

enter image description here

主.py

from src.tools.tool_a import fun


def main_fun():
    fun()

tools_a.py

def fun():
    raise Exception('')

test_fun.py

from unittest.mock import patch
from src.main import main_fun


@patch('src.tools.tool_a.fun')
def test_main_fun(fun):
    main_fun()

如果我运行 pytest

tests/test_fun.py
,我会从方法
fun()
中得到异常。我已经嘲笑了它,所以不明白嘲笑它的正确方法是什么。

python mocking pytest python-unittest
1个回答
0
投票

@jonrsharpe 在评论中给出了正确的答案,但是解决方案更容易找到,我将其发布在这里:

您可以在使用事物的地方进行修补,而不是在定义它们的地方进行修补: docs.python.org/3/library/unittest.mock.html#在哪里打补丁

因此,代码应该是:

from unittest.mock import patch
from src.main import main_fun


@patch('src.main.fun')
def test_main_fun(fun):
    main_fun()
© www.soinside.com 2019 - 2024. All rights reserved.