python清除unittest.mock的完整历史记录

问题描述

我正在使用unittest.mock,看来它泄漏了很多对象。

我确保始终使用with语句,例如with mock.patch.object(target=...):

但是我可以看到许多unittest.mock._CallListunittest.mock._CallListunittest.mock.MagicProxy类型的对象。

是否有一种方法可以在执行每个测试或类似的测试后清除它?

解决方法

我没有完全回答你的问题。

因此,在模拟对象之后,您发现有很多调用它的对象吗?然后要重置?

您可以使用reset_mock

这里是一个例子:

创建script.py

import boto3

client = boto3.client("ssm")
client2 = boto3.client("sqm")

创建test_a.py

from unittest.mock import patch,MagicMock

@patch("boto3.client")
def test_boto(boto3):
    import script
    assert len(boto3.mock_calls) == 2
    boto3.reset_mock()
    assert len(boto3.mock_calls) == 0

运行python3 -m pytest