困っていること
タイトルの通りです。
ソースコードを見た方がわかりやすいかと思いますので、ソースコードを掲載します。
python
1# app_name/mymodule/hoge.py 2from mymodule.operation import Operation 3class Hoge(): 4 def __init__(self): 5 # インスタンス変数 6 self._client = Operation() 7 8 def public_method(self): 9 # 外部APIと通信して結果を返却する処理 10 # このrequest_operation_method()だけをmockで置き替えたい 11 result = self._client.request_operation_method() 12 13 # ここでresultをごちゃごちゃといじる 14 # この「いじる」処理が期待通りに行われているかをテストしたい 15 return result
python
1# app_name/tests/some_test.py 2import unittest 3from unittest.mock import patch 4import mymodule.hoge as hoge 5 6class TestHoge(unittest.TestCase): 7 def setUp(self): 8 self.hoge = hoge.Hoge() 9 10 def test__public_method(self): 11 with patch('ここに何を書いたらいいかわからない') as mock: 12 mock.return_value = 'hoge' 13 result = self.hoge.public_method() 14 self.assertEqual(result, 'hoge', '両方hoge')
困っていること 文章.ver
たぶん読んでも意味が分からないかと思いますが、一応文字にもしておきます。
たぶん、上記ソースコードを見た方がわかりやすいと思います...。
前提
あるHogeクラスのインスタンス変数に、他のクラス(Operationクラス)のインスタンスを作成・代入しています。
この、Operationクラスのインスタンスが代入されているHogeクラスのインスタンス変数は、他のインスタンスメソッド(public_method)内で利用されています。
やりたいこと
このとき、public_methodの単体テストをしたいのですが、public_method内で呼び出しているself._client.request_operation_method()というメソッドは、外部サービスAPIにリクエストを行う処理であるため、mock化したいと考えています。
mock化するためにunittestのpatchが使えると知ったのですが、今回の「やりたいこと」を達成するためにはどのようにpatch()メソッドの引数を指定したらよいのでしょうか?
補足
どうしてもできないようであれば、request_operation_method()ではなく、_clientごとmock化しても構わないと考えています。
ただし、Hoge()クラスのインスタンス自体をmock化してしまうと、そのインスタンスメソッドを呼んでテストすることができなくなってしまうので、これはダメなようです(これはやってみたところダメでした)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/19 23:46
2019/04/19 23:59
2019/04/20 01:47