python 是否正在修补类属性以返回不同的值?

gk7wooem  于 2023-03-16  发布在  Python
关注(0)|答案(2)|浏览(126)

给定以下生产代码,其中file_path为pathlib.path类型

previous_time = file_path.stat().st_mtime

# recreate the file
.....

if file_path.stat().st_mtime != previous_time:
   # do XXXXX

如何修补Path对象以覆盖'# do XXXXX''执行路径?
我试过给st_mtime类成员赋一个副作用或者给它赋一个PropertyMock(side_effect=[1,33]),但是没有成功。
有什么建议吗?

lsmepo6l

lsmepo6l1#

好吧我已经通过说

path_mock.stat.side_effect=[Mock(), Mock()]
zc0qhyus

zc0qhyus2#

可以使用side_effect使stat方法返回具有不同st_mtime值的Mock对象:

from pathlib import Path
from unittest.mock import patch, Mock

file_path = Path('')
with patch('__main__.file_path') as mock_file_path:
    mock_file_path.stat.side_effect = [Mock(st_mtime=1), Mock(st_mtime=33)]

    previous_time = file_path.stat().st_mtime
    if file_path.stat().st_mtime - previous_time:
        print('do XXXXX')

演示:https://replit.com/@blhsing/WeeklyFrizzyMuse

相关问题