Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.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类的方法并返回动态值_Python_Unit Testing - Fatal编程技术网

模拟Python类的方法并返回动态值

模拟Python类的方法并返回动态值,python,unit-testing,Python,Unit Testing,如何使用Python的模块来模拟使用同一类成员的方法 class NameHelper(object): def __init__(self): self.local_id = 0 def next_id(self): self.local_id += 1 return str(self.local_id) 注意,我将在设置中进行修补方法: class TestSomeClient(unittest.TestCase):

如何使用Python的模块来模拟使用同一类成员的方法

class NameHelper(object):
    def __init__(self):
        self.local_id = 0

    def next_id(self):
        self.local_id += 1
        return str(self.local_id)
注意,我将在
设置中进行修补
方法:

class TestSomeClient(unittest.TestCase):

    def setUp(self):
        patcher = patch('helpers.name_helper.NameHelper')
        self.addCleanup(patcher.stop)
        self.mock_name_helper = patcher.start()

        # The actual mocked values
        self.mock_name_helper.return_value.local_id = 0
        self.mock_name_helper.return_value.next_id.return_value = 'mock-name'

显然,模拟名称不是一个合理的模拟返回值。返回值应该使用
nameheloper
local\u id
成员

我不确定为什么该问题被否决而没有任何评论。答案是,国际海事组织,不清楚

的Python文档提供了以下在安装程序中进行修补的示例:

class MyTest(TestCase):
     def setUp(self):
         self.patcher1 = patch('package.module.Class1')
         self.MockClass1 = self.patcher1.start()

     def tearDown(self):
         self.patcher1.stop()

MyTest('test_something').run()
然而,当修补整个类时,这是误导性的。以下内容更有帮助:

class MockClass1():
    pass

class MyTest(TestCase):
    def setUp(self):
        self.patcher1 = patch('package.module.Class1')
        self.MockClass1 = self.patcher1.start()
        self.MockClass1.return_value = MockClass1()

    def tearDown(self):
        self.patcher1.stop()
注意,附加行:

self.MockClass1.return_value = MockClass1()
返回值
应该是类
MockClass1
的新实例。适用于我的示例:

class MockNameHelper(object):
    def __init__(self):
        self.local_id = 0

    def next_id(self):
        self.local_id += 1
        return str(self.local_id)

class TestSomeClient(unittest.TestCase):

    def setUp(self):
        patcher = patch('helpers.name_helper.NameHelper')
        self.addCleanup(patcher.stop)
        self.MockNameHelper = patcher.start()
        self.MockNameHelper.return_value = MockNameHelper()