2017-09-04 40 views
-1
## tests file 
@mock.patch('profiles.models.create_stripe_charge', StripeMocks._mock_raises_stripe_error) 
def my_test(self): 
    # ... stuff 


## logic file 
def create_stripe_charge(customer, amount_in_cents, capture=True): 
    # ... stuff 

## mocks file 
class StripeMocks: 
    def _mock_raises_stripe_error(self): 
     raise stripe.error.StripeError 

私のテストを実行しているときに、私は_mock_raises_stripe_error() takes 1 positional argument but 3 were given'というエラーが発生しました。異なる引数を使用したPythonモックパッチ構文の問題番号

私は3-argsメソッドを1-argメソッドでモックしようとしていることを理解していますが、ただPythonに伝えたいのであれば、私のcreate_stripe_chargeメソッドがどれだけ多くの引数を持っていても、それが例外を発生させることをシミュレートする。

これを行う正しい構文は何ですか?ありがとう。モックが呼び出されたときに例外を発生させる

答えて

2

は、例外にside_effect attributeを設定します。

@mock.patch('profiles.models.create_stripe_charge', 
      side_effect=stripe.error.StripeError) 
def my_test(self, mock_create_stripe_charge): 
    # ... 

あなたが唯一の引数(self)をとる関数で、完全にcreate_stripe_charge()を置き換えます。追加の引数を取得するには*argsを使用することができます(また、アンバインドされたメソッドを使用したため、selfを使用する必要はありません)。しかし、新しい関数を使用するのは良い考えではありません。

関数を置き換えるために適切なモックを使用すると、模擬関数が正しく呼び出されたことをアサーションすることができ、渡された引数についてアサーションを行うことができます。

+0

優れた説明...ドキュメントにはまっていました..ありがとうございます。 –

関連する問題