for entry in os.scandir(document_dir)
if os.path.isdir(entry):
# some code goes here
else:
# else the file needs to be in a folder
file_path = entry.path.replace(os.sep, '/')
在else语句中模拟os.scandir和path属性时遇到问题。我无法模拟在单元测试中创建的模拟对象的属性
with patch("os.scandir") as mock_scandir:
# mock_scandir.return_value = ["docs.json", ]
# mock_scandir.side_effect = ["docs.json", ]
# mock_scandir.return_value.path = PropertyMock(return_value="docs.json")
这些都是我尝试过的选择。非常感谢您的帮助
这取决于你真正需要嘲笑什么。问题是
os.scandir
返回类型为os.DirEntry
的条目。一种可能是使用您自己的mockDirEntry
,只实现您需要的方法(在您的示例中,只实现path
)。例如,您还必须模拟os.path.isdir
。下面是一个独立的示例,介绍如何做到这一点:根据您的实际代码,您可能需要做更多的工作
如果你想修补更多的文件系统函数,你可以考虑使用pyfakefs来代替整个文件系统。对于单个测试来说,这将是过分的,但是对于依赖于文件系统功能的测试套件来说,这是非常方便的
免责声明:我是pyfakefs的贡献者
相关问题 更多 >
编程相关推荐