Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何对os.walk触发错误处理程序进行单元测试?_Python_Unit Testing_Testing_Pytest - Fatal编程技术网

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):
        ...