我有一些代码,我用来接受文件输入,打开和处理,然后输出一些数据.我已经使功能正常工作,我现在正在进行单元测试,下面是代码示例.
def foo(dir):
path_to_search = join(dir, "/baz/foo")
if isdir(path_to_search):
#path exists so do stuff...
for fname in listdir(path_to_search):
do_stuff()
else:
print "path doesn't exist"
我已经能够创建一个过去不容易存在的测试,但是如上所述,我断言目录结构的“/ baz / foo”部分存在(在生产中,目录结构必须具有此功能)文件,在某些情况下它不会,我们将不需要处理它.)
我试图使用TempDir和join创建一个临时目录结构,但代码总是踢出来说路径不存在.
是否可以模拟os.listdir的输出,这样我就不需要创建一个遵循所需/ baz / foo约定的临时目录结构?
解决方法:
您不需要创建虚假的目录结构,您只需要模拟isdir()和listdir()函数.
try:
# Python >= 3.3
from unittest import mock
except ImportError:
# Python < 3.3
import mock
with mock.patch('yourmodule.isdir') as mocked_isdir, \
mock.patch('yourmodule.listdir') as mocked_listdir:
mocked_isdir.return_value = True
mocked_listdir.return_value = ['filename1', 'filename2']
yourmodule.foo('/spam/eggs')
mocked_isdir.assert_called_with('/spam/eggs/baz/foo')
mocked_listdir.assert_called_with('/spam/eggs/baz/foo')
标签:python,unit-testing
来源: https://codeday.me/bug/20190528/1172509.html