特定の引数のセットで関数モックが呼び出された回数を数える方法はありますか?

レスポール

次のようなAPI呼び出しをモックする関数があります。

def mocked_api_call(animal = animal, soundtype=soundtype)

    output = make_sound(animal, soundtype)

    return output

目標は、モックが同じ引数のセットで2回呼び出されたときに、異なる出力を返すようにすることです。たとえば、最初の呼び出しで「meow」を返し、2回目で「MEAAAOWWW」を返し、3回目の呼び出しで「mew」を返すようにします。

output = mocked_api_call(animal='cat', soundtype = 'meow')
# outputs 'meow'

output = mocked_api_call(animal='cat', soundtype = 'meow')
# outputs 'MEAAAOWWW'

output = mocked_api_call(animal='cat', soundtype = 'meow')
# outputs 'mew'

パッチは、APIを呼び出す関数を使用する親関数をテストするために使用されます。

def parent_function(**kwargs):
    response = make_sound(animal=animal, soundtype=soundtype)

テスト関数は、次のようにモンキーパッチを介して呼び出されます。

@mock.patch('myscript.api_call', side_effect=mocked_api_call) 
def test_parent_function(*args, **kwargs):
    output = parent_function(**kwargs)

しかし、関数が呼び出された回数に依存する応答を生成する方法を見つけることができません。これはpytestでできることですか?

MrBeanブレーメン

テストがどのように表示されるかは完全にはわかりませんが、テストごとにコールインデックスがリセットされる、さまざまなテストが必要であると仮定します。以下は、ニーズによっては少し一般的すぎるmake_sound場合があります。必要なのがそれだけの場合は、インデックスを渡すこともできます。

from unittest import mock
import pytest


class TestSounds:
    indexes = {}
    sounds = {
        ('cat', 'meow'): ('meow', 'MEAAAOWWW', 'mew'),
    }

    @classmethod
    def make_sound(cls, animal, soundtype):
        key = (animal, soundtype)
        if key in cls.sounds:
            index = cls.indexes.setdefault(key, 0)
            sound = cls.sounds[key][index]
            cls.indexes[key] = (index + 1) % len(cls.sounds[key])
            return sound

    # if you need the order not be reset in each test, you can change 
    # the scope to "class"
    @pytest.fixture(scope="function", autouse=True)
    def reset_indexes(self):
        self.__class__.indexes = {}

    def test_parent_function(self, **kwargs):
        with mock.patch('myscript.api_call',
                        side_effect=[self.make_sound(**kwargs),
                                     self.make_sound(**kwargs)]):
            output1 = parent_function(**kwargs)
            output2 = parent_function(**kwargs)

これはテストされていないことに注意してください、しかしそれはあなたにいくつかのアイデアを与えるかもしれません。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

呼び出された関数の引数を使用して関数を呼び出すために使用できるテクニックはありますか?

分類Dev

別の関数から取得した文字列でインデックス付けされたテーブル内の関数を呼び出すにはどうすればよいですか?また、引数を追加する必要がありますか?

分類Dev

モッククラスの別の関数から呼び出された関数を使用したテストが失敗するのはなぜですか?

分類Dev

Javaユニットテストでは、関数型の変数が特定の引数を渡して呼び出されることを確認する方法は?

分類Dev

vuexストアのreplaceState関数がいつ呼び出されたかを知る方法はありますか?

分類Dev

単体テストでmain()から呼び出された関数の戻り値をモックする

分類Dev

関数呼び出しで渡される引数の数がその定義の引数の数と同じでない場合は、特定のエラーメッセージを表示しますか?

分類Dev

axiospromiseの「then」で呼び出される関数をモックする方法は?

分類Dev

Mockitoでモックが呼び出された回数を取得する方法

分類Dev

モックされた関数をチェックする方法は、clojure with_redefsで指定された引数を使用して少なくとも1回呼び出されますか?

分類Dev

このブックマークレットがクリックされた回数を数えることは可能ですか?もしそうなら、ファイルへのクリック数を取得する方法はありますか?

分類Dev

NASMは、関数を呼び出した後に関数の引数をポップする必要がありますか?

分類Dev

Scalaで `val`を使用して定義された関数を、そのブロックの最終結果ではなく、中括弧ブロック全体を引数として呼び出す方法はありますか?

分類Dev

メソッドが特定の引数で一度呼び出されたことを確認する方法を確認しますが、他の引数での呼び出しは無視しますか?

分類Dev

他の関数が呼び出された回数に基づいてスイッチ関数を操作するにはどうすればよいですか?

分類Dev

Enzyme / Jest:モックされた関数が呼び出されたかどうかをテストする方法

分類Dev

可変個引数関数の選択された引数のセットを抽出し、それらを使用して別の関数を呼び出す方法

分類Dev

Pythonテストの別の関数呼び出し内で呼び出される関数リターンをモックできますか?

分類Dev

キャッチの外で呼び出されないように、リッピンコット関数を宣言する「安全な」方法はありますか?

分類Dev

関数が呼び出された引数の数を返しますか?

分類Dev

可変個引数パックを使用した関数のC ++部分テンプレート引数の推定により、ClangおよびMSVCであいまいな呼び出しが生成されます

分類Dev

指定されたメソッドを呼び出す方法はありません。例外が発生する回数

分類Dev

関数ポインタであるcmd行引数で配列のインデックスを渡し、perlで特定の関数を呼び出す方法は?

分類Dev

別の関数の引数で関数を呼び出す方法はありますか?

分類Dev

Flaskでは、複数のチェックボックスでHTML入力タグのさまざまな関数を呼び出す方法はありますか?

分類Dev

シングルトンクラスのQtメッセージハンドラーメンバー関数を呼び出すとエラーが発生するのはなぜですか:引数リストがありませんか?

分類Dev

Rust:マクロタイプの引数で静的関数を呼び出す方法はありますか?

分類Dev

関数をリストまたはディクショナリに格納して、インデックス(またはキー)が呼び出されたときに、格納された関数を起動する方法はありますか?

分類Dev

デフォルトの引数で関数を呼び出す簡単な方法はありますか?

Related 関連記事

  1. 1

    呼び出された関数の引数を使用して関数を呼び出すために使用できるテクニックはありますか?

  2. 2

    別の関数から取得した文字列でインデックス付けされたテーブル内の関数を呼び出すにはどうすればよいですか?また、引数を追加する必要がありますか?

  3. 3

    モッククラスの別の関数から呼び出された関数を使用したテストが失敗するのはなぜですか?

  4. 4

    Javaユニットテストでは、関数型の変数が特定の引数を渡して呼び出されることを確認する方法は?

  5. 5

    vuexストアのreplaceState関数がいつ呼び出されたかを知る方法はありますか?

  6. 6

    単体テストでmain()から呼び出された関数の戻り値をモックする

  7. 7

    関数呼び出しで渡される引数の数がその定義の引数の数と同じでない場合は、特定のエラーメッセージを表示しますか?

  8. 8

    axiospromiseの「then」で呼び出される関数をモックする方法は?

  9. 9

    Mockitoでモックが呼び出された回数を取得する方法

  10. 10

    モックされた関数をチェックする方法は、clojure with_redefsで指定された引数を使用して少なくとも1回呼び出されますか?

  11. 11

    このブックマークレットがクリックされた回数を数えることは可能ですか?もしそうなら、ファイルへのクリック数を取得する方法はありますか?

  12. 12

    NASMは、関数を呼び出した後に関数の引数をポップする必要がありますか?

  13. 13

    Scalaで `val`を使用して定義された関数を、そのブロックの最終結果ではなく、中括弧ブロック全体を引数として呼び出す方法はありますか?

  14. 14

    メソッドが特定の引数で一度呼び出されたことを確認する方法を確認しますが、他の引数での呼び出しは無視しますか?

  15. 15

    他の関数が呼び出された回数に基づいてスイッチ関数を操作するにはどうすればよいですか?

  16. 16

    Enzyme / Jest:モックされた関数が呼び出されたかどうかをテストする方法

  17. 17

    可変個引数関数の選択された引数のセットを抽出し、それらを使用して別の関数を呼び出す方法

  18. 18

    Pythonテストの別の関数呼び出し内で呼び出される関数リターンをモックできますか?

  19. 19

    キャッチの外で呼び出されないように、リッピンコット関数を宣言する「安全な」方法はありますか?

  20. 20

    関数が呼び出された引数の数を返しますか?

  21. 21

    可変個引数パックを使用した関数のC ++部分テンプレート引数の推定により、ClangおよびMSVCであいまいな呼び出しが生成されます

  22. 22

    指定されたメソッドを呼び出す方法はありません。例外が発生する回数

  23. 23

    関数ポインタであるcmd行引数で配列のインデックスを渡し、perlで特定の関数を呼び出す方法は?

  24. 24

    別の関数の引数で関数を呼び出す方法はありますか?

  25. 25

    Flaskでは、複数のチェックボックスでHTML入力タグのさまざまな関数を呼び出す方法はありますか?

  26. 26

    シングルトンクラスのQtメッセージハンドラーメンバー関数を呼び出すとエラーが発生するのはなぜですか:引数リストがありませんか?

  27. 27

    Rust:マクロタイプの引数で静的関数を呼び出す方法はありますか?

  28. 28

    関数をリストまたはディクショナリに格納して、インデックス(またはキー)が呼び出されたときに、格納された関数を起動する方法はありますか?

  29. 29

    デフォルトの引数で関数を呼び出す簡単な方法はありますか?

ホットタグ

アーカイブ