2017-10-16 15 views
0

je dans mon code:ne pas être pris dans try-except bloc lors de l'essai de l'unité

import api 

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

Fondamentalement, il appelle une API et re-relances l'exception avec un autre type. Mon test vérifie le cas où l'exception est levée:

@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() 

Cependant échoue parce que mon test ParseException et non est jeté ValidationError. Que se passe-t-il?

Répondre

0

Notez la ligne @patch('code.api'). Cela dit patch TOUT au code.api. Le ParseException est probablement aussi dans le module api et ainsi patché aussi. Si vous déboguez votre code, vous verrez que type(ParseException) n'est pas une instance d'Exception mais une instance de MagicMock.

Je viens de passer une heure à me taper la tête sur le bureau, j'espère que cela aidera quelqu'un.