编程语言
首页 > 编程语言> > python-在对象上仅模拟一个方法

python-在对象上仅模拟一个方法

作者:互联网

我熟悉其他语言的其他模拟库,例如Java中的Mockito,但是Python的模拟库使我的生活变得混乱.

我有以下课程要测试.

class MyClassUnderTest(object):

    def submethod(self, *args):
       do_dangerous_things()

    def main_method(self):
       self.submethod("Nothing.")

在我的测试中,我想确保在执行main_method时调用了该子方法,并且使用正确的参数调用了该子方法.我不希望子方法运行,因为它会做危险的事情.

我完全不确定该如何开始. Mock的文档难以理解,而且我不确定该模拟什么或如何模拟它.

如何在不保留main_method功能的情况下模拟submethod函数?

解决方法:

我认为您正在寻找的是嘲笑对象

with mock.patch.object(MyClassUnderTest, "submethod") as submethod_mocked:
    submethod_mocked.return_value = 13
    MyClassUnderTest().main_method()
    submethod_mocked.assert_called_once_with(user_id, 100, self.context,
                                             self.account_type)

这是小描述

 patch.object(target, attribute, new=DEFAULT, 
              spec=None, create=False, spec_set=None, 
              autospec=None, new_callable=None, **kwargs)

patch the named member (attribute) on an object (target) with a mock object.

标签:python-mock,python,mocking
来源: https://codeday.me/bug/20191010/1886488.html