python子对象和父对象_python – 查找子项的父模拟对象,父项的子模拟对象

是否可以识别子模拟对象实例的父

MagicMock模拟对象实例,或父模拟对象实例的子实例?例如,如果我有以下代码

>>> from unittest.mock import MagicMock

>>> parent_mock = MagicMock()

>>> child_mock1 = parent_mock(a=1)

>>> child_mock2 = parent_mock(b='spam')

我怎么能在以后确认从调用parent_mock产生的儿童嘲笑?我怎样才能检查parent_mock生成的模拟对象?

另外,我怎么能区分child_mock1专门来自调用parent_mock(a = 1),而child_mock2来自调用parent_mock(b =’spam’)?

我理解一个可以manually attach mocks as attributes of other mocks,但是,它需要大量的设置,你需要确保明确定义父模拟的返回调用,以便它返回指定的子模拟,因此它不能很好地扩展过了几个电话.

最佳答案

How could I confirm later that the child mocks spawned from calling parent_mock?

好吧,有一个未记录的属性_mock_new_parent,您可以像这样使用…

>>> from unittest.mock import MagicMock

>>> parent_mock = MagicMock()

>>> child_mock1 = parent_mock(a=1)

>>> child_mock2 = parent_mock(b='spam')

>>> child_mock1._mock_new_parent is parent_mock

True

>>> child_mock2._mock_new_parent is parent_mock

True

…但看起来你所有其他问题的答案都是“你不能”.

我想你可以将MagicMock子类化,用这样的东西跟踪它的孩子…

class MyMock(MagicMock):

def __init__(self, *args, **kwargs):

MagicMock.__init__(self, *args, **kwargs)

self._kids = []

def __call__(self, *args, **kwargs):

result = MagicMock.__call__(self, *args, **kwargs)

self._kids.append((args, kwargs, result))

return result

……然后你可以……

>>> parent_mock = MyMock()

>>> child_mock1 = parent_mock(a=1)

>>> child_mock2 = parent_mock(b='spam')

>>> parent_mock._kids

[((), {'a': 1}, ),

((), {'b': 'spam'}, )]

>>> parent_mock._kids[0][2] is child_mock1

True

>>> parent_mock._kids[1][2] is child_mock2

True

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值