3

单元测试将对象列表传递给方法。该方法在对象上使用 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: maximum recursion depth exceeded since jsonpickle 显然沿着模拟对象中的无限树向下移动。

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

谢谢!

4

0 回答 0