2017-10-16 97 views
0

期間塊我有這個在我的代碼:異常不陷入嘗試 - 除了單元測試

import api 

def do_something(): 
    try: 
     api = api.Api() 
     api.call() 
    except ParseException as e: 
     logger.exception('Error occurred') 
     raise ValidationError(detail=e.message) 

基本上它調用API,並重新提出了與其他類型的異常。 我的測試檢查時,拋出異常的情況:

@patch('code.api') 
def test_exception(self, api_mock): 
    api_mock.Api.side_effect = ParseException('General Error') 
    self.assertRaises(
     ValidationError, 
     do_something 
    ) 
    api_mock.Api.assert_called_once() 

但是因爲ParseException被拋出,而不是ValidationError我的測試失敗。到底是怎麼回事?

回答

0

注意@patch('code.api')一行。這說明code.api中的所有補丁。 ParseException也可能在api模塊中,因此也進行了修補。如果你調試你的代碼,你會看到type(ParseException)不是一個Exception的實例,而是一個MagicMock的實例。

我剛用了一個小時把我的頭撞在桌子上,希望這可以幫助別人。