【发布时间】:2017-03-23 22:00:15
【问题描述】:
长时间聆听,第一次来电。
我编写了一个 python 2.7 方法,该方法对具有一些 find 类似功能的给定目录执行递归扫描(使用 scandir)(即,您可以指定mindepth 和 maxdepth):
def scan_tree(self, search_path, max_levels=-1, min_levels=-1, _level=0):
"""Recursively yield DirEntry objects for given directory."""
max_out = max_levels > -1 and _level == max_levels
min_out = min_levels > -1 and _level <= min_levels
for entry in scandir(search_path):
if entry.is_dir(follow_symlinks=False) and not max_out:
for child in self._scan_tree(entry.path, max_levels,
min_levels, _level + 1):
if not child.is_dir(follow_symlinks=False):
yield child
elif not min_out:
yield entry
问题是,我一生都无法找出编写单元测试的最佳/正确方法,这将使我能够正确地mock递归scandir调用和 测试我的最小和最大扫描参数的行为。
通常我会使用scandir.walk 进行扫描(我已经编写了一个可正确测试的版本),但我真的需要scandir 吐出的DirEntry 实例的信息。
任何想法将不胜感激。谢谢!
【问题讨论】:
-
我能够通过使用
scandir作为基础设置walk-like 方法(即返回一个(root, dir_entries, file_entries)的元组)并使用类似的方法来回到可测试状态mock最初为walk工作的策略,但我很想弄清楚如何处理最初的递归问题。谢谢!
标签: python-2.7 recursion scandir