2017-10-26 7 views
0

私は複数の記事を読んだが、私はそれを得ていない、私は同じメソドロジを別の場所で使用していたが、それは機能した。別のクラスのメソッドで2つの関数を嘲笑

プラグイン/ iaw_api/helpers.py:

import requests 
import json 


def https_post_json(request_url, headers, data, timeout=20): 
    response = requests.post(request_url, json=data, headers=headers, timeout=timeout) 
    return json.loads(response.content) 

プラグイン/ iaw_api/iaw_api_runners.py:/ iaw_api/tests.py

from plugins.iaw_api.helpers import https_post_json 


class IawApiRunner(object): 

    def __init__(self, runner_class_in): 

     self._runner_data_class = runner_class_in 
     self.result = None 

    def run_job(self): 

     if type(self._runner_data_class) == SomeRunner: 
      self._this_runner() 

    def _this_runner(self): 

     _task_id = https_post_json(<request-content>) 
     print _task_id 

テスト:

from plugins.iaw_api.helpers import https_post_json 
from plugins.iaw_api.iaw_api_runners import IawApiRunner 


class TestApiRunners(unittest.TestCase): 

    def __init__(self, *args, **kwargs): 

     super(TestApiRunners, self).__init__(*args, **kwargs) 
     self.test_runner = IawApiRunner(SomeRunner) 

     def test_single_run_no_error(self): 
      with mock.patch('plugins.iaw_api.helpers.https_post_json') as MockPost: 
       MockPost.return_value = {'status_id': '59f0681cf9c32000132c7e89'} 
       self.test_runner.run_job() 

この私はまだアサーションを追加していません。問題は、実際のhttp_postが模擬戻り値であるレスポンスではなく、APIに行くというテストを実行するときです。

答えて

0

のコードに使用されている名前にパッチを適用する必要があります。この場合は、https_post_json(モジュールの名前空間に直接インポートされます)です。 iaw_api_runners.pyimport plugins_this_runner_task_id = plugins.iaw_api.helpers.https_post_json(...)とちょうど使用された場合、あなたのパッチは正しいでしょう。

関連する問題