如何在基类的方法被覆盖时模拟它?

jav*_*vex 4 python mocking python-2.7 python-3.x

我有一个类似的代码:

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)
Run Code Online (Sandbox Code Playgroud)

现在我想确保Child.test_method调用Parent.test_method. 为此,我想assert_called_once_with模拟模块/库中使用。但是,我想不出一种方法来做到这一点。如果该方法不会被子类覆盖,这将很容易,正如需要在 python 测试用例中模拟一些基类行为所指出的那样。但是,在我的情况下,这是相同的方法,那么我该怎么办?

and*_*and 9

您可以使用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)
Run Code Online (Sandbox Code Playgroud)