2017-09-04 88 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模擬補丁語法問題編號

我明白我試圖用1-arg方法來模擬3-args方法,但是如果我只是想告訴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): 
    # ... 

您更換create_stripe_charge()完全,有一個功能,只需要一個參數(self)。您可以使用*args來捕獲其他參數(因爲您使用了未綁定的方法,因此根本不需要使用self),但使用新函數並不是一個好主意。

使用適當的模擬來替換函數也可以讓你斷言模擬被正確調用,並且可以對傳入的參數作出斷言。當你使用自己的函數時,你不能這樣做。

+0

優秀的解釋...被卡在文檔中..謝謝。 –