python - 如何使用 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 吗?
解决方案
如果您在测试模块中导入Path
using 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
,但它应该足够简单。
推荐阅读
- angular - Angular 6:设置空表单数组字段
- homebrew - 没有为自制软件找到 gpg-agent
- c - 在处理文件之前声明可变数量的变量
- javascript - 在 Firebase 中通过 id 获取特定对象/项目
- .htaccess - htaccess:带有任何 URI 的 URL 不重定向到 https://www
- python - 如何在 wtform validate_ 中获取另一个字段的数据?
- android - Android Studio 的 Javadoc 验证器?
- java - 调试器不在堆栈帧中显示新变量
- html - 除此之外,还有更优雅的方式来格式化表格中的表格吗?我有不同的数字行
- python - 迭代多索引数据帧并将数据存储在新数据帧中的最佳方法