0

getResponseメソッドでサービスを提供するClientという名前のクラスがあります。このクラスは他のクラスによって使用されます。Clientクラスを使用するクラスDriverの単体テストを行います。mock.patch を使用して、ClientクラスをMockClientと呼ばれるモック クラスに置き換えます。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'

これは、モック クラスを含む Test クラスです。

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_callscall比較できるオブジェクトのリストが必要です。予想される引数とキーワード引数を指定してヘルパー関数を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 に答える