用于模拟打开文件调用的智能对象,取决于文件路径

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)-返回注册的对象 路径。如果映射不存在,则引发密钥错误

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何序列化数字?   java如何用我的Mainclass扩展ListActivity类和Fragment类?   JavaJersey、Jackson和JAXRS发布了多种JSON格式   java如何使用JavaFXKeyCombination覆盖系统默认的键盘快捷键,如Ctrl+C、Ctrl+V?   java Jersey类路径扫描示例Jersey。配置。服务器供应商。类路径   java什么样的数据结构可以作为一个数组,但在同一索引下给定多个值时会自动增长到第二维度?   java如何序列化非持久实体中的嵌套PersistentEntityResource   协议缓冲区我可以让protoc在Java中生成int数组吗?   在GregorianCalendar ArrayList Java中添加日期元素   从html模板动态生成pdf文件并用java生成目录   java Gridgain 6.5.5开源多个节点速度较慢。。?   java如何检查数组中所有整数的不相等性?   java在Eclipse中,如何多次运行JUnit测试用例   java侦听器不能处理特定的片段   java不是一个声明?(蓝色J)   找不到Attributer类型的PersonId的java定义