在对象上仅模拟一个方法

发布于 2021-01-29 14:59:04

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

我有以下课程想测试。

class MyClassUnderTest(object):

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

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

在我的测试中,我想确保submethodmain_method执行时调用了,并使用正确的参数调用了它。我不想submethod跑步,因为它会做危险的事情。

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

submethodmain_method单独保留功能的同时,如何模拟该功能?

关注者
0
被浏览
53
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    我想你要找的是 mock.patch.object

    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)
    

    使用模拟对象在对象(目标)上修补命名成员(属性)。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看