0

我有一个名为Client的类,通过它的getResponse方法提供一些服务。这个类被其他类使用。我为使用Client类的类Driver进行单元测试。通过使用 mock.patch,我将Client类替换为名为MockClient的模拟类,该类 具有相同的getResponse方法,返回一些预定义的值。它工作得很好。但现在我想测试调用getRsponse方法的参数。我想通过使用 *assert_has_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')
4

1 回答 1

0

assert_has_calls期望call它可以比较的对象列表。您可以通过使用预期参数和关键字参数call调用辅助函数来获取对象。mock.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)
于 2013-09-09T11:30:27.663 回答