gpt4 book ai didi

python - 导入时调用的模拟函数

转载 作者:行者123 更新时间:2023-11-28 17:42:15 25 4
gpt4 key购买 nike

我有一个需要测试的模块,该模块在导入时调用了一个函数,但由于各种原因我无法调用该函数。所以我在模拟这个函数,但甚至模拟它调用导入。

例如,我正在测试如下所示的 mod1.py:

import os

def bar():
return 'foo'

def dont_call():
os.listdir("C:\\tmp")

dont_call()

我的测试看起来像这样:

import mock

@mock.patch("mod1.dont_call")
def test_mod1(mock_dont_call):
import mod1
assert mod1.bar()=='foo'

if __name__=="__main__":
test_mod1()

问题是 os.listdir 被调用了。

我无法更改 mod1,我该怎么办?

我用的是python2.7。

为了说明这一点,我正在测试一个在导入时打开数据库连接的模块,我不同意这一点,但我可以看到它背后的原因。不幸的是,我无法在我的 QA 机器上访问这个数据库。

最佳答案

如果您希望代码“不”在导入时执行,请将它们置于以下条件中:

在 mod1.py 中,执行以下操作:

if __name__=="__main__":
dont_call()

这是因为,默认情况下,当您导入 python 模块时,其中的所有代码都会被执行。通过添加上述条件,您明确声明 dont_call() 仅在文件作为脚本运行时调用,而不是在其他模块中导入时调用。

关于python - 导入时调用的模拟函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22616934/

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