在单元测试中模拟 isdir() 而不是 os.path.isdir() 函数

mock isdir() instead of os.path.isdir() function in unittests

我的代码使用 isdir() 而不是 os.path.isdir()。在我看来,如果在代码中多次出现,第一个更具可读性。 尝试单元测试时,模拟不起作用。测试未通过并获得异常。 我可以在不将源代码中的名称更改为 os.path.isdir() 的情况下模拟 isdir() 吗?

源代码

from os.path import isdir

def check_path_existence(self, path_to_check):
    if isdir(path_to_check):
        pass
    else:
        raise Exception("Directory does not exists")

测试:

@patch("os.path.isdir")
def test_check_path_existence(self, mock_isdir):
    mock_isdir.return_value = True

    self.assertIsNone(check_path_existence("invalid_path")

MrBean Bremen 评论的扩展:

如果您正在测试的模块有一个像 mypackage.mymodule 这样的导入路径,那么您需要像这样编写您的模拟:

@patch("mypackage.mymodule.isdir")
def test_check_path_existence(self, mock_isdir):
    mock_isdir.return_value = True

    self.assertIsNone(check_path_existence("invalid_path")

这样,您就可以模拟模块命名空间中 isdir 的实例。修补原始导入路径 os.path.isdir 仅当您的模块通过将其作为 os.path 的属性引用它来使用 isdir 函数时才有效,您出于风格原因决定不这样做。