可以给Python的"Mock"对象添加实例方法吗?
我想创建一个 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 对象上该怎么办。