0

サーバーに HTTP リクエストを送信する Python メソッドをテストしています。メソッドは次のようになります。

def do_something():
    data = get_data()
    make_request(data)

def make_request(self, data):
    self.send_response(200)
    self.wfile.write(json.dumps(msg))

私のテストから、データ変数に基づいてアサートしたいと思います。製品コードには触れたくありません (つまり、メソッドが明示的にデータを返すようにしたくありません)。make_request メソッドをモックアウトして、params を戻り値として返す方法はありますか? 何かのようなもの:

service.make_request = MagicMock(return_value=params)
4

1 に答える 1

0

get_data()私が正しく理解していれば、コードを変更せずに本番環境で動作をテストしたいと考えています。

フレームワークによって、センサー ポイントとして使用したり、抽出mockすることができます(詳細はcall as tuplesを参照)。make_request(data)call_argsdata

簡単な例:

def extract_data(mock_make_request):
    """Helper function that return data passed to make_request() mock
    Check also if you have some calls and then reset it"""
    assert mock_make_request.called
    args, kwargs = mock_make_request.call_args
    mock_make_request.reset_mock()
    try:
        return kwargs['data']
    except TypeError:
        return args[0]

@patch("productioncodemodule.make_request")
def test_data(mock_make_request):
    """... your code that make do_something() call..."""
    data = extract_data(mock_make_request)
    """... your assert here..."""

patchここで説明するには詳細 (デコレータなど)が多すぎますreset_mock()が、リンクされたドキュメントですべてをカバーする必要があります。

于 2016-02-11T12:49:37.697 に答える