如何模拟被重写的基类方法?

5 投票
1 回答
7840 浏览
提问于 2025-04-17 22:48

我有一段代码,差不多是这样的:

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。为此,我想使用 assert_called_once_with,这是来自 mock 模块的一个功能。不过,我找不到办法来实现这一点。如果这个方法没有被子类覆盖,那就简单多了,正如这个链接所提到的那样。但是在我的情况下,这两个方法是一样的,那我该怎么办呢?

1 个回答

11

你可以使用 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)

撰写回答