gpt4 book ai didi

python - 仅针对一个模块使用 Mock 修补功能?

转载 作者:太空狗 更新时间:2023-10-30 01:02:55 28 4
gpt4 key购买 nike

我需要修补 os.listdir 和其他 os 函数来测试我的 Python 函数。但是当它们被修补时,import 语句会失败。是否可以只在那个单独的模块(真正的模块)中修补这个函数,并让 tests.py 正常工作?

这是一个破坏 import 的例子:

import os
from mock import patch

# when both isdir and isfile are patched
# the function crashes
@patch('os.path.isdir', return_value=False)
@patch('os.path.isfile', return_value=False)
def test(*args):
import ipdb; ipdb.set_trace()
real_function(some_arguments)
pass

test()

我希望 real_function 看到打过补丁的 os.path,并进行测试以查看正常功能。

here's the traceback

最佳答案

您可以使用 patch 作为上下文管理器,因此它只会应用于 with 语句中的代码:

import os
from mock import patch

def test(*args):
import ipdb; ipdb.set_trace()
with patch('os.path.isdir', return_value=False):
with patch('os.path.isfile', return_value=False):
real_function(some_arguments)
pass

test()

关于python - 仅针对一个模块使用 Mock 修补功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12621049/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com