可以给Python的"Mock"对象添加实例方法吗?

9 投票
2 回答
13579 浏览
提问于 2025-04-17 13:17

我想创建一个 mock.Mock() 对象,然后添加一个叫做 session 的方法,这个方法就像实例方法一样,可以接收一个 self 参数,这个参数指向这个 mock 对象,这样这个方法就可以给 mock 对象添加一些状态。请问这样做可能吗?(不想手动使用 types.MethodType,也就是不想用 mock 自带的 API),还是说我应该找其他方法来解决这个问题?

另外,我发现了 这个问题,它是关于 Ruby 的,似乎讨论了类似的内容,甚至可能是同样的事情。不过,我对 Ruby 不是很了解。

2 个回答

6
mock_answer = Mock()

def session():
    mock_answer.b = 1

mock_answer.session = session
mock_answer.session()
print(mock_answer.b)  # 1

其实你并不需要用到 self

4

如果你想增强 mock.Mock 类的功能,只需要创建一个新的类,继承自 Mock,然后添加你自己的方法就可以了。

class MyMock(Mock):
    def session(self):
        # Save session data here?

mock 的 文档解释说,当你要创建一个新的 mock 时,它会和父类是同一种类型。这意味着在模拟过程中创建的其他 mock 也会有 session 这个功能。

不过,这里没有提到如果你需要动态地把 session 功能添加到一个已经存在的 mock 对象上该怎么办。

撰写回答