【问题标题】:How to mock a base class's method when it was overridden?重写基类的方法时如何模拟它?
【发布时间】:2014-03-18 12:53:20
【问题描述】:

我有一个类似这样的代码:

from mock import MagicMock


class Parent(object):

    def test_method(self, param):
        # do something with param
        pass


class Child(Parent):

    def test_method(self, param):
        # do something Child-specific with param
        super(Child, self).test_method(param)

现在我想确保Child.test_method 调用Parent.test_method。为此,我想使用来自mock 模块/库的assert_called_once_with。但是,我想不出办法来做到这一点。如果该方法不会被子类覆盖,这将很容易,正如Need to mock out some base class behavior in a python test case 所指出的那样。但是,在我的情况下,这是相同的方法,那我该怎么办?

【问题讨论】:

    标签: python python-2.7 python-3.x mocking


    【解决方案1】:

    你可以使用patch.object:

    with mock.patch.object(Parent, 'test_method') as mock_method:
        child = Child()
        mock_param = mock.Mock()
        child.test_method(mock_param)
        mock_method.assert_called_with(mock_param)
    

    【讨论】:

    • 这个方法适用于超类的任何方法不是吗?
    • @Romain,是的,它适用于被覆盖和不被覆盖的方法,如果这就是你的意思的话。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-30
    • 2017-05-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多