Python 如何对os.walk触发错误处理程序进行单元测试?
如果遇到调用自定义处理程序的Python 如何对os.walk触发错误处理程序进行单元测试?,python,unit-testing,testing,pytest,Python,Unit Testing,Testing,Pytest,如果遇到调用自定义处理程序的os.walk,如何对其进行单元测试 我试图通过在临时目录中创建一个临时文件,然后限制该目录的权限来实现这一点。不幸的是,这使试跑者崩溃了。寻找更优雅的解决方案 您可能不是在测试os.walk,而是测试使用os.walk的函数是否正确设置了错误处理程序,以及它是否正确处理os错误。考试要问两个问题 函数是否调用了正确的错误处理程序 该错误处理程序是否正确处理OSError 您不需要尝试获取os.walk来生成OSError,而只需要它来生成任何错误。您可以直接获取错误
os.walk
,如何对其进行单元测试
我试图通过在临时目录中创建一个临时文件,然后限制该目录的权限来实现这一点。不幸的是,这使试跑者崩溃了。寻找更优雅的解决方案 您可能不是在测试
os.walk
,而是测试使用os.walk
的函数是否正确设置了错误处理程序,以及它是否正确处理os错误。考试要问两个问题
函数是否调用了正确的错误处理程序
该错误处理程序是否正确处理OSError
您不需要尝试获取os.walk
来生成OSError
,而只需要它来生成任何错误。您可以直接获取错误处理程序,而不是通过os.walk测试错误处理程序
首先,调用os.walk
,使用您知道不存在的路径。检查错误处理程序是否已运行。您要测试的只是正确的错误处理程序运行
对于第二种情况,使用OSError
对象直接调用错误处理程序。您所测试的只是错误处理程序处理OSError
对象。您看过stdlib如何测试os.walk
以获得灵感吗?“不幸的是,这使测试运行程序崩溃。”我最担心的是。我不太明白为什么不能在单元测试中简单地模拟walk\u error\u handler
,并检查它是否做了什么。。比如写文件之类的。@nir0s我可以也愿意。但是你需要触发os.walk来以某种方式引发操作错误。你是否尝试创建一个文件并动态更改其权限?在os.步行之前?好主意
# my_module.py
def walk_error_handler(os_error_instance):
logger.error(...)
for root, dirs, files in os.walk(path, onerror=walk_error_handler):
...