J'ai une méthode python 2.7 qui appelle parfois
sys.exit(1)
Est-il possible de faire un test unitaire qui vérifie que cette ligne de code est appelée lorsque les bonnes conditions sont remplies?
python
unit-testing
Travis Bear
la source
la source
Réponses:
Oui.
sys.exit
augmenteSystemExit
, vous pouvez donc le vérifier avecassertRaises
:Les instances de
SystemExit
ont un attributcode
qui est défini sur le statut de sortie proposé, et le gestionnaire de contexte renvoyé parassertRaises
a l'instance d'exception capturée commeexception
, donc vérifier le statut de sortie est facile:Documentation sys.exit :
la source
sys.exit(1)
(par opposition à, disons,sys.exit(0)
) vous devez en fait affirmer quecode
c'est 1. Je suppose que vous pourriez le faire avecassertRaisesRegexp(SystemExit, '1')
?unittest
méthode qui vous permet de passer une exception et un prédicat appelable à exécuter sur l'exception ou ses arguments, plutôt qu'un simple motif regex à exécuter sur la représentation sous forme de chaîne de son premier argument… mais je suppose que non. Y a-t-il un autre module de test auquel je pense?self.assertRaisesRegex( SystemExit, '^2$', testMethod )
moins de code, assez lisible.self.assertRaisesRegexp
Voici un exemple de travail complet. En dépit de l'excellente réponse de Pavel, il m'a fallu un certain temps pour comprendre cela, donc je l'inclus ici dans l'espoir que ce sera utile.
la source
J'ai trouvé la réponse à votre question dans la recherche de documentation Python Unit Testing pour "Testing for Exceptions". En utilisant votre exemple, le test unitaire ressemblerait à ceci:
N'oubliez pas d'inclure tous les arguments nécessaires pour tester votre fonction.
la source
En guise de note supplémentaire à l'excellente réponse de Pavel, vous pouvez également vérifier les statuts spécifiques s'ils sont fournis dans la fonction que vous testez. Par exemple, s'il
your_method()
contenait ce qui suit,sys.exit("Error")
il serait possible de tester spécifiquement "Erreur":la source