首页 > 解决方案 > 如何使用 pathlib.Path 对象模拟文件大小?

问题描述

在我的函数中,我以前使用该os.path.getsize函数来获取文件大小。因此,在我的测试服中,我使用以下内容来测试函数的结果值:

# init test values
test_value = 7.5
size_name = ("B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB")
        
# mock 0 B file 
with patch('os.path.getsize', return_value=0):
    txt = su.get_file_size('random')
    self.assertEqual(txt, '0B')
        
# mock every pow of 1024 to YB
for i in range(9):
    with patch('os.path.getsize', return_value=test_value*(1024**i)):
        txt = su.get_file_size('random')
        self.assertEqual(txt, f'7.5 {size_name[i]}')

现在我在内部将pathlib.Path对象用作文件。所以我现在想模拟Path(filename).stat().st_size。有人可以告诉我应该在 with 语句中使用什么而不是 patch 吗?

标签: pythonmockingpython-unittest

解决方案


如果您在测试模块中导入Pathusing from pathlib import Path,您可以使用类似这样的东西(查看修补位置以获取更多信息):

   with patch('yourmodule.su.Path.stat') as stat:
        stat.return_value.st_size = 0
        txt = get_file_size('random')

stat()由于方法调用 ( ),您不能直接模拟整个表达式,您必须使用 来模拟return_value,但它应该足够简单。


推荐阅读