オブジェクトが呼び出されるunittest.mock.Mock
と、呼び出しの正確な署名で引数の値を確認できます。
from unittest.mock import Mock
m = Mock() # creation of mock
m('foo', bar='baz') # call to the mock
m.assert_called_once_with('foo', bar='baz') # check call arguments
同じ値を持つ別の署名のチェックは失敗します。'baz'
たとえば、名前付き引数の代わりに位置引数としてチェックすると、アサーションは失敗します。
m.assert_called_once_with('foo', 'baz')
# AssertionError: Expected call: mock('foo', 'baz')
# Actual call: mock('foo', bar='baz')
それはしなければなりません。置き換えられた関数m
が
def actual_fu(foo, bar):
# do something
その場合、呼び出しは同等になりますが、
def a_different_actual_fu(foo, *args, bar='some default'):
# do something
その場合、呼び出しは同等ではありません。Mock
は実際の関数のシグネチャを知らないため、最初のケースでの等価性に依存できません。
モック (またはアサーション ヘルパー関数など) にモックによって置き換えられた実際の関数を知らせることによって、それらが位置的に渡されたのか、キーワード引数として渡されたのかにとらわれない呼び出し引数の値をチェックする方法はありますか?
オプションの引数またはautospeccingMock
を使用して、置換するオブジェクト (関数またはメソッド) をオブジェクトに認識させることができますが、それらは別の目的 (モックで許可する呼び出しを制限する) を提供し、後で影響しません。 -事実確認。spec