httpリクエストを行うPythonでカスタムAPIをテストしていますが、実行するたびに実際の外部システムに要求したくありませんユニットテスト。私はAPI応答を動的に偽装するためにside_effect関数を持つPythonのモックライブラリを使用しています。 side_effectメソッドをクラスメソッドのように動作させるにはどうすればよいですか?ユニットテストでクラスメソッドとして動作するためのPython Mock side_effectの使用方法
import requests
class MyApiClass():
def make_request(self, params):
return requests.get('http://someurl.com', params=params)
def create_an_object(self, params):
return self.make_request(params)
import unittest, mock
def side_effect_func(self, params):
if params['name'] == 'Specific Name':
return {'text': 'Specific Action'}
else:
return {'text': 'General Action'}
class MyApiTest(unittest.TestCase):
def setUp(self):
super(MyApiTest, self).setUp()
mocked_method = mock.Mock(side_effect=side_effect_func)
MyApiClass.make_request = mocked_method
def test_create_object(self):
api = MyApiClass()
params = {'name': 'Specific Name'}
r = api.create_an_object(params) # Complains that two arguments are needed!
self.assertEqual(r['text'], 'Specific Action')
私は
TypeError: side_effect_func() takes exactly 2 arguments (1 given)
このエラーを取得するが、私はside_effect_func
が最初の引数としてapi
渡したいです。助けをよろしく!
はい、ありがとうございます。私は、パッチを貼ったアンバウンドメソッドを嘲笑することが私の必要なものだと思います。そうでない場合は、MyApiClassをハードコーディングすることをお勧めします。 – conman