gpt4 book ai didi

python - 查找子对象的父模拟对象,父对象的子模拟对象

转载 作者:太空宇宙 更新时间:2023-11-03 11:32:01 24 4
gpt4 key购买 nike

是否可以识别 parent 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}, <MyMock name='mock()' id='140358357513616'>),
((), {'b': 'spam'}, <MyMock name='mock()' id='140358357513616'>)]
>>> parent_mock._kids[0][2] is child_mock1
True
>>> parent_mock._kids[1][2] is child_mock2
True

关于python - 查找子对象的父模拟对象,父对象的子模拟对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16742805/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com