在单元测试中模拟 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
函数时才有效,您出于风格原因决定不这样做。
我的代码使用 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
函数时才有效,您出于风格原因决定不这样做。