Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python单元测试-如何保留函数';s已转换为模拟对象的副作用?_Python_Python 3.x_Python Unittest.mock - Fatal编程技术网

python单元测试-如何保留函数';s已转换为模拟对象的副作用?

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

我想计算一个函数被调用的次数,建议使用python补丁,允许我调用
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调用,其中实际上不调用而是模拟。您还可以通过使用副作用来模拟函数的返回