やりたいことは題名の通りです。
より具体的に書くと、次のソースコード中の、orders.OrderCreate()
メソッドに渡された引数をテストしたいです。
※ソースコード及びテストコードは、大分簡略化しているので、このままでは動かない可能性があります
テスト対象のソースコード
python
1# target.py 2 3from oandapyV20 import API 4import oandapyV20.endpoints.orders as orders 5 6 7class TargetClass(): 8 def __init__(self): 9 self.__api_client = API(access_token='hoge', environment='practice') 10 11 def target_method(number_str): 12 data = {'hoge': int(number_str)} 13 # テストしたい部分: このメソッドに渡された引数をテストしたい 14 # data引数に渡された値をテストしたい(実際はめんどうな変換を色々しているが、サンプルとしてinteger型への変換を掲載しています) 15 request_obj = orders.OrderCreate(accountID='hoge', data=data) 16 17 response = self.__api_client.request(request_obj) 18 return response
試したこと(テストコード)
patch を使って次のようなことを試してみましたが、うまくいきませんでした。
python
1# tests/test_target.py 2 3import target 4import unittest 5from unittest.mock import patch, MagicMock 6 7 8class TestClient(unittest.TestCase): 9 @classmethod 10 def setUpClass(cls): 11 cls.__client = target.TargetClass() 12 13 def test_order_args(self): 14 data = {'hoge': 111} 15 16 orders_mock = MagicMock() 17 with patch('oandapyV20.endpoints.orders', return_value=orders_mock): 18 self.__client.target_method('111') 19 20 orders_mock.OrderCreate.assert_called_with('hoge', data)
実行結果
bash
1$ pytest tests 2 3# 略 4 5E AssertionError: expected call not found. 6E Expected: OrderCreate('hoge', {'hoge': 111}) 7E Actual: not called. 8 9# 略
not called
とあるので、OrderCreate
の引数が一致しなかったのではなく、そもそもorders_mock.OrderCreate
が呼ばれていないという状態です。
なので、patch
の書き方が間違っている、ということまではわかっています。
ですが、どうかけば正しい書き方になるのかがわかっていません。(patchはよく使っているのですが...)
その他
時間がないため、掲載したソースの動作確認をすることが今はできないのですが、動くようにする必要があれば修正したいと思います。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/10 01:57 編集
2020/05/14 10:23