用于模拟打开文件调用的智能对象,取决于文件路径
open-mock-file的Python项目详细描述
说明
此库包含对象,可以在模拟 测验。功能:
- 您可以为注册不同的操作(提供不同的对象) 不同路径
- 您可以添加文本,该文本将在读取时返回
- 可以为未注册的路径选择行为。
支持的行为:
- 引发filenotfounderror异常(默认行为)
- 从文件系统返回原始文件
- 返回模拟对象
安装
可以使用以下命令安装它:
pip install open-mock-file
用法:
示例
模拟打开第一个带有自定义对象的文件,第二个带有字符串数据和 引发未注册路径的filenotfounderror:
fromunittest.mockimportpatchfromopen_file_mockimportMockOpenclassFileObject:def__init__(self,data):self.data=datadefread(self,*args,**kwargs):returnself.datadefwrite(self,data,*args,**kwargs):self.data=datadef__enter__(self):returnselfdef__exit__(self,exc_type,exc_val,exc_tb):passwithpatch('builtins.open',new_callable=MockOpen)asopen_mock:open_mock.register_object_for_path(path='/tmp/f1',obj=FileObject('Some data'))open_mock.set_read_data_for(path='/tmp/f2',data='file2 data')withopen('/tmp/f1')asf1:print(f1.read())f1.write('Other data')print(f1.read())print('----------------------')withopen('/tmp/f2')asf2:print(f2.read())print('----------------------')open('/etc/hostname')
输出:
Some data Other data ---------------------- file2 data ---------------------- Traceback (most recent call last): ... FileNotFoundError: File /etc/hostname not found in mock function
将默认行为(对于未注册的路径)设置为返回原始文件:
fromunittest.mockimportpatch,MagicMockfromopen_file_mockimportMockOpen,DEFAULTS_ORIGINALwithpatch('builtins.open',new_callable=MockOpen)asopen_mock:open_mock.default_behavior=DEFAULTS_ORIGINALopen_mock.register_object_for_path(path='/tmp/f1',obj=MagicMock())withopen('/tmp/f1')asf1:print(f1.read())print('----------------------')withopen('/etc/hostname')asf2:print(f2.read())print('----------------------')
输出:
<MagicMock name='mock.__enter__().read()' id='...'> ---------------------- myhost ----------------------
设置默认行为以返回新模拟:
fromunittest.mockimportpatchfromopen_file_mockimportMockOpen,DEFAULTS_MOCKwithpatch('builtins.open',new_callable=MockOpen)asopen_mock:open_mock.default_behavior=DEFAULTS_MOCKopen_mock.set_read_data_for('/tmp/f1','QWERTY')withopen('/tmp/f1')asf1:print(f1.read())print('----------------------')withopen('/etc/hostname')asf2:print(f2.read())print('----------------------')
输出:
QWERTY ---------------------- <MagicMock name='mock.__enter__().read()' id='...'> ----------------------
您可以使用get_object_for_path方法获取注册对象:
fromunittest.mockimportpatchfromopen_file_mockimportMockOpenclassFileObject:def__init__(self,data):self.data=datadefread(self,*args,**kwargs):returnself.datadefwrite(self,data,*args,**kwargs):self.data=datadef__enter__(self):returnselfdef__exit__(self,exc_type,exc_val,exc_tb):passwithpatch('builtins.open',new_callable=MockOpen)asopen_mock:open_mock.register_object_for_path(path='/tmp/f1',obj=FileObject('Some data'))open_mock.set_read_data_for(path='/tmp/f2',data='file2 data')withopen('/tmp/f1')asf1:print(f1.read())print('----------------------')print(open_mock.get_object_for_path('/tmp/f1'))
输出:
Some data ---------------------- <__main__.FileObject object at ...>
对象方法:
- register_object_for_path(path,obj)-允许注册新的 提供路径的对象。可对特定路径使用一次
- update_object_for_path(path,obj)-更新注册路径或 如果不存在,则创建新的映射< /LI>
- unregister_path(path)-删除路径映射
- set_read_data_for(path,data)-设置将 文件读取返回
- get_object_for_path(path)-返回注册的对象 路径。如果映射不存在,则引发密钥错误