为了账号安全,请及时绑定邮箱和手机立即绑定

需要从 lxml.etree 模块模拟 ElementTree 类的 write() 方法

需要从 lxml.etree 模块模拟 ElementTree 类的 write() 方法

慕婉清6462132 2021-10-10 16:31:27
我正在编写一个方法,该方法使用 lxml.etree 中 ElementTree 类的 write 方法。在编写我的测试时,我想模拟一下,这样单元测试就不会向我的驱动器写一堆东西。我文件中的代码看起来像这样    # myapp\gla.py    from lxml.etree import Element, ElementTree    def my_func(element):        root = Element(element)        xml = ElementTree(root)        xml.write('path_to_file')测试看起来像这样:    # tests\test_gla.py    from unittest import patch    from myapp.gla import my_func    @patch('myapp.gla.ElementTree.write')    def test_my_func(self, mock_write):        my_func('rootElement')        mock_write.assert_called_once()我明白了    Traceback (most recent call last):      File "C:\Anaconda2\envs\py36\lib\unittest\mock.py", line 1171, in patched        arg = patching.__enter__()      File "C:\Anaconda2\envs\py36\lib\unittest\mock.py", line 1243, in __enter__        original, local = self.get_original()      File "C:\Anaconda2\envs\py36\lib\unittest\mock.py", line 1217, in get_original        "%s does not have the attribute %r" % (target, name)    AttributeError: <cyfunction ElementTree at 0x000001FFB4430BC8> does not have the attribute 'write'
查看完整描述

2 回答

?
桃花长相依

TA贡献1860条经验 获得超8个赞

找到了我自己的问题的答案。


像这样重新编写测试:


# tests\test_gla.py

from unittest import patch, MagicMock

from myapp.gla import my_func


@patch('myapp.gla.ElementTree')

def test_my_func(self, mock_write):

    mock_write().write = MagicMock()

    my_func('rootElement')

    mock_write().write.assert_called_once()


查看完整回答
反对 回复 2021-10-10
?
动漫人物

TA贡献1815条经验 获得超10个赞

ElementTree是一个函数,而不是一个类型。它返回一个类型的对象,_ElementTree它具有函数write

我还没有测试过这个(我不太了解/关于模拟的任何事情),但我怀疑

 @patch('myapp.gla._ElementTree.write')

应该可以工作(尽管您可能还需要_ElementTree自己导入)。


查看完整回答
反对 回复 2021-10-10
  • 2 回答
  • 0 关注
  • 314 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信