この質問は、 Python のデコレータに関するこのすばらしい回答 のフォローアップです。
与えられた「スニペットを使用して、デコレーターが一般的に任意の引数を受け入れるようにします」。
それから私はこの(ここでは簡略化された)デコレータを持っています:
@decorator_with_args
def has_permission_from_kwarg(func, *args, **kwargs):
"""Decorator to check simple access/view rights by the kwarg."""
def wrapper(*args_1, **kwargs_1):
if 'kwarg' in kwargs_1:
kwarg = kwargs_1['kwarg']
else:
raise HTTP403Error()
return func(*args_1, **kwargs_1)
return wrapper
- このデコレータを使用すると、問題なくうまく機能します。
- kwargs をまったく必要としない同様のデコレータをテストしても、同じ結果になります。
しかし、次のモックでこのデコレータをテストしてもうまくいきません:
def test_can_access_kwarg(self): """Test simple permission decorator.""" func = Mock(return_value='OK') decorated_func = has_permission_from_slug()(func(kwarg=self.kwarg)) # It will raise at the following line, whereas the kwarg is provided... response = decorated_func() self.assertTrue(func.called) self.assertEqual(response, 'OK')
「kwarg」キーワード引数がない場合に発生する例外を返します...
関数に渡されたキーワード引数の1つへのアクセスを必要とする別のデコレータによって装飾されたそのようなデコレータをテストする方法の手がかりはありますか?