对imp调用了模拟函数

2024-04-25 19:43:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要测试一个在导入时调用函数的模块,但是由于各种原因我不能调用这个函数。所以我模仿了这个函数,但即使是模仿它也会调用import。在

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

import os

def bar():
    return 'foo'

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

dont_call()

我的测试结果是这样的:

^{pr2}$

问题是操作系统列表目录被称为。在

我不能改变mod1,那我能做什么?在

我用的是python2.7。在

为了将这一点放在上下文中,我正在测试一个模块,该模块在导入时打开一个数据库连接,我不同意,但我可以看到背后的原因。不幸的是,我不能在QA机器上访问这个数据库。在


Tags: 模块函数pyimport数据库returnfooos
2条回答

我找到的解决办法是模仿dont_call的电话给我这样的东西:

import mock

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

if __name__=="__main__":
    test_mod1()

如果要在导入时“不”执行代码,请将其置于以下条件内:

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

if __name__=="__main__":
    dont_call()

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

相关问题 更多 >