vfx*_*Ger 5 python unit-testing mocking
我有一个需要测试的模块,该模块在导入时调用函数,但由于各种原因我无法调用该函数。所以我嘲笑这个函数,但甚至嘲笑它调用导入。
例如,我正在测试 mod1.py ,如下所示:
import os
def bar():
return 'foo'
def dont_call():
os.listdir("C:\\tmp")
dont_call()
Run Code Online (Sandbox Code Playgroud)
我的测试看起来像这样:
import mock
@mock.patch("mod1.dont_call")
def test_mod1(mock_dont_call):
import mod1
assert mod1.bar()=='foo'
if __name__=="__main__":
test_mod1()
Run Code Online (Sandbox Code Playgroud)
问题是 os.listdir 被调用。
我无法更改 mod1 那么我该怎么办?
我使用的是python2.7。
为了将其放在上下文中,我正在测试一个在导入时打开数据库连接的模块,我不同意该模块,但我可以看到其背后的原因。不幸的是,我无法在我的 QA 机器上访问该数据库。
我发现的解决方法是模拟 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()
Run Code Online (Sandbox Code Playgroud)