如何单元测试os.walk触发错误处理程序?

时间:2017-03-09 19:00:46

标签: python unit-testing testing pytest

# my_module.py

def walk_error_handler(os_error_instance):
    logger.error(...)

for root, dirs, files in os.walk(path, onerror=walk_error_handler):
    ...

如果os.walk遇到OSError,调用自定义处理程序,如何对其进行单元测试?

我尝试通过在临时目录中创建临时文件,然后限制目录的权限来实现此目的。不幸的是,撞毁了测试跑者。寻找更优雅的解决方案。

1 个答案:

答案 0 :(得分:1)

据推测,您并未测试os.walk,但使用os.walk的函数已正确设置其错误处理程序并且正确处理OSError。测试中有两个问题。

  1. 函数是否调用了正确的错误处理程序?
  2. 该错误处理程序是否正确处理OSError
  3. 您只需要生成任何错误,而不是试图让os.walk生成OSError。而不是通过os.walk测试错误处理程序,您可以直接获取它。

    首先,使用您知道不存在的路径拨打os.walk。检查错误处理程序是否已运行。您正在测试的是正确的错误处理程序运行。

    对于第二个,直接使用OSError对象调用错误处理程序。您正在测试的是错误处理程序处理OSError对象。