在对象上只模拟一个方法

Naf*_*Kay 25 python mocking python-mock

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

我有以下课程,我想测试.

class MyClassUnderTest(object):

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

    def main_method(self):
       self.submethod("Nothing.")
Run Code Online (Sandbox Code Playgroud)

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

我完全不确定如何开始这个.Mock的文档非常难以理解,我不确定甚至可以模拟甚至如何模拟它.

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

ole*_*leg 35

我认为你在寻找的是 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)
Run Code Online (Sandbox Code Playgroud)

这是小描述

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

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

  • 谢谢,出于某种原因,我一直很难理解所有不同的“补丁”方法以及如何使用它们。 (2认同)