将magicmock传入时超出了最大递归深度jsonpickle.encode()

2024-10-01 00:31:32 发布

您现在位置:Python中文网/ 问答频道 /正文

单元测试将对象列表传递到方法中。 该方法使用jsonpickle.encode在物体上。在

很好,但是当单元测试发送模拟对象列表并运行到无限递归时该怎么办?在

下面是一个代码示例:

import jsonpickle
from mock.mock import MagicMock


class Foo(object):
    def __init__(self):
        pass


def encodeFoos(list_of_foos):
    [jsonpickle.encode(x) for x in list_of_foos]


def works():
    list_of_foos = [Foo()]
    encodeFoos(list_of_foos=list_of_foos)


def unit_test_doesnt_work():
    list_of_mock_foos = [MagicMock()]
    encodeFoos(list_of_mock_foos)

unit_test_doesnt_work()

引发的错误是: RuntimeError:超过最大递归深度 因为jsonpickle显然沿着mocked对象中的一棵无限树向下移动。在

如何保持产品代码的原样(encodeFoos),并且在传入模拟对象时不会遇到最大递归?在

谢谢!在


Tags: of对象方法代码import列表def单元测试