首页 > 解决方案 > 如何在unittest-pytest中替换函数内部的变量

问题描述

我在我必须测试的方法内部替换变量时遇到问题,即:

def find_files(path):
    path_dir = os.listdir(path)
    ...

并且出于测试的需要,我必须将path_dir实际结果替换os.listdir为某些测试列表,即['whatever1.txt', 'whatever2.txt', 'whatever3.txt']

怎么做?BR,达米安

标签: pythonpytest

解决方案


您可以使用mock.patch为变量设置返回值。例如

with patch('os.listdir') as mocked_listdir:
    mocked_listdir().return_value = ['.', '..']
    find_files(path)

或者你可以设置一个副作用

with patch('os.listdir') as mocked_listdir:
    mocked_listdir().side_effect = some_other_function
    find_files(path)

推荐阅读