在定义了功能的文件中修补功能

时间:2019-03-01 21:56:51

标签: python unit-testing mocking

我正在尝试学习单元测试补丁。我有一个都定义了一个函数,然后再使用该函数的文件。当我尝试修补此函数时,其返回值是给我 real 返回值,而不是 patched 返回值。

如何修补在同一文件中定义和使用的函数?注意:我确实尝试遵循here给出的建议,但似乎并不能解决我的问题。

walk_dir.py


    from os.path import dirname, join
    from os import walk
    from json import load


    def get_config():
        current_path =dirname(__file__)
        with open(join(current_path, 'config', 'json', 'folder.json')) as json_file:
            json_data = load(json_file)

        return json_data['parent_dir'] 

    def get_all_folders():
        dir_to_walk = get_config()
        for root, dir, _ in walk(dir_to_walk):
            return [join(root, name) for name in dir]

test_walk_dir.py


    from hello_world.walk_dir import get_all_folders
    from unittest.mock import patch


    @patch('walk_dir.get_config')
    def test_get_all_folders(mock_get_config):
        mock_get_config.return_value = 'C:\\temp\\test\\'
        result = get_all_folders()
        assert set(result) == set('C:\\temp\\test\\test_walk_dir')

1 个答案:

答案 0 :(得分:1)

尝试以这种方式声明补丁:

@patch('hello_world.walk_dir.get_config')

您可以看到this answer链接到的问题,建议您的import语句与patch语句匹配。在您的情况下,from hello_world.walk_dir import get_all_folders@patch('walk_dir.get_config')不匹配。