Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.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_Mocking - Fatal编程技术网

Python类模拟。如何获取模拟类方法调用信息

Python类模拟。如何获取模拟类方法调用信息,python,unit-testing,mocking,Python,Unit Testing,Mocking,我有一个名为Client的类,它通过getResponse方法提供一些服务。这个类被其他类使用。 我为使用客户机类的类驱动程序进行单元测试。 通过使用mock.patch,我将客户机类替换为名为MockClient的mock类 它具有相同的getResponse方法,返回一些预定义的值。 它工作得很好。但是现在我想测试调用getRsponse方法的参数。 我想通过使用*assert\u has\u calls*方法来实现。 不知道怎么做。请给我一些建议 测试类别: # Driver and it

我有一个名为Client的类,它通过getResponse方法提供一些服务。这个类被其他类使用。 我为使用客户机类的类驱动程序进行单元测试。 通过使用mock.patch,我将客户机类替换为名为MockClient的mock类 它具有相同的getResponse方法,返回一些预定义的值。 它工作得很好。但是现在我想测试调用getRsponse方法的参数。 我想通过使用*assert\u has\u calls*方法来实现。 不知道怎么做。请给我一些建议

测试类别:

# Driver and its Client

class Driver:
    def __init__ (self):
        self.client = Client()

    def call(self, param):
        return self.client.getResponse(param)


class Client:
    def getResponse(self, param):
        return 'original'
这是带有模拟类的测试类:

import unittest
import mock

import driver
from driver import Driver 
from driver import Client


class MockClient:
    def getResponse(self,param):
        return 'mock class' 


class TestIt(unittest.TestCase):

    def setUp(self):
        self.mock_client = mock.patch('driver.Client',create=True, new=MockClient)
        self.mock_client.start()

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

    def test_call(self):
        driver = Driver()
        result = driver.call('test')
        self.assertEqual(result, 'mock class')

assert\u has\u calls
需要一个可以比较的
call
对象列表。 通过使用预期参数和关键字参数调用helper函数,可以获得
call
对象

此示例非常简单,并很好地说明了其用法:

mock = Mock(return_value=None)
mock(1)
mock(2)
mock(3)
mock(4)
calls = [call(2), call(3)]
mock.assert_has_calls(calls)
calls = [call(4), call(2), call(3)]
mock.assert_has_calls(calls, any_order=True)

谢谢你的回答@jbaiter,我看到了这个文档,我不明白的是如何访问实际的模拟对象。我有一个mock_客户机,它是从patch函数中获得的,创建了一个mock对象,而不是真正的客户机对象,但是我无法访问被调用的方法。我可能错过了一些重要的事情。