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

我有以下类(class)想测试。

class MyClassUnderTest(object):

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

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

在我的测试中,我想确保在执行submethod时调用了main_method并使用正确的参数对其进行了调用。我不希望submethod运行,因为它会做危险的事情。

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

我如何模拟submethod函数,而又不保留main_method中的功能?

最佳答案

我认为您正在寻找的是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)

关于python - 在对象上仅模拟一个方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19737124/

10-14 16:57