Est-il possible pour un test unitaire pour affirmer que les appels de méthode sys.exit()
J'ai un python 2.7 méthode que, parfois, les appels
sys.exit(1)
Est-il possible de faire un test unitaire qui vérifie cette ligne de code est appelé quand les bonnes conditions sont réunies?
- Double Possible de Unittest: affirmer le droit SystemExit code
Vous devez vous connecter pour publier un commentaire.
Oui.
sys.exit
soulèveSystemExit
, de sorte que vous pouvez vérifier avecassertRaises
:Instances de
SystemExit
ont un attributcode
qui est défini pour le projet de statut de sortie, et le gestionnaire de contexte retourné parassertRaises
a l'exception interceptée instanceexception
, de sorte que la vérification de l'état de sortie est facile:sys.la sortie de la Documentation:
sys.exit(1)
(par opposition à, disons,sys.exit(0)
), vous devez effectivement faire valoir sescode
est 1. Je suppose que vous pouvez le faire avecassertRaisesRegexp(SystemExit, '1')
?unittest
méthode qui vous permet de passer d'une exception et d'un "callable" prédicat pour s'exécuter sur l'exception ou de ses arguments, plutôt que de simplement un regex motif exécuter sur la représentation de chaîne de son premier arg... mais je ne crois pas. Est-il un autre module de test je suis en train de penser?self.assertRaisesRegex( SystemExit, '^2$', testMethod )
Moins de code, assez lisible.self.assertRaisesRegexp
Ici est un exemple de travail. En dépit de Pavel excellente réponse, il m'a fallu un certain temps pour comprendre cela, donc je suis, y compris ici dans l'espoir qu'il sera utile.
J'ai trouvé la réponse à votre question dans la Python Tests Unitaires de la documentation de la recherche pour "dépistage des Exceptions". À l'aide de votre exemple, l'unité de test serait la suivante:
N'oubliez pas d'inclure tous les arguments nécessaires pour tester votre fonction.
Comme une note complémentaire à Pavel excellente réponse, vous pouvez également vérifier les statuts particuliers s'ils sont fournis dans la fonction que vous faites des tests. Par exemple, si
your_method()
contenait les éléments suivantssys.exit("Error")
il serait possible de tester "Erreur" en particulier: