python unittest - 如何保留已转换为 Mock 对象的函数的副作用?



我想计算函数被调用的次数,建议使用python补丁允许我调用call_countassert_not_called之类的东西来验证这一点。

我的问题是,我希望函数能像它一样执行,因为它的函数是测试所必需的,而且它是在动态数据上的,所以我不能简单地对结果进行硬编码。

with patch.object(shutil, 'copy') as mm:
do_some_things()
mm.assert_not_called()

为了使do_some_things()正常工作,shutil.copy仍然需要执行其原始角色

我建议只使用patch而不是patch.object。你仍然可以用它来完成你想要的一切。我在~/test中没有任何内容

from unittest import TestCase
from unittest.mock import patch
from shutil import copy
def do_some_things(src, dst):
copy(src, dst)

class TestDoSomething(TestCase):
def test_do_somethings(self):
with patch('test_do_some_things.copy') as mm:
do_some_things('~/test.txt', '~/test/test.txt')
mm.called_once()
print(mm.call_count)

最新更新