python单元测试-如何保留函数';s已转换为模拟对象的副作用?
我想计算一个函数被调用的次数,建议使用python补丁,允许我调用python单元测试-如何保留函数';s已转换为模拟对象的副作用?,python,python-3.x,python-unittest.mock,Python,Python 3.x,Python Unittest.mock,我想计算一个函数被调用的次数,建议使用python补丁,允许我调用call\u count,并调用assert\u not\u来验证这一点 我的问题是,我希望函数能够像以前一样执行,因为它的函数是测试所必需的,并且它是基于动态数据的,所以我不能简单地硬编码结果 将patch.object(shutil,'copy')作为mm: 做一些事情 mm.assert_not_called() 要使做一些事情()正常工作,shutil.copy仍然需要执行其原始角色我建议只使用补丁而不是补丁.objec
call\u count
,并调用assert\u not\u
来验证这一点
我的问题是,我希望函数能够像以前一样执行,因为它的函数是测试所必需的,并且它是基于动态数据的,所以我不能简单地硬编码结果
将patch.object(shutil,'copy')作为mm:
做一些事情
mm.assert_not_called()
要使
做一些事情()
正常工作,shutil.copy仍然需要执行其原始角色我建议只使用补丁
而不是补丁.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)
我建议只使用
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)
我认为您没有正确地实现修补程序。如果实现正确,将修补shutil调用,其中实际上不调用而是模拟。你也可以通过使用副作用来模拟函数的返回。我认为你没有正确地实现补丁。如果实现正确,将修补shutil调用,其中实际上不调用而是模拟。您还可以通过使用副作用来模拟函数的返回