python pour débutant
- Vues vs copies – Real Python
- Boostez vos ventes avec la navigation intelligente sur le site WordPress
- Bonne interview avec Matt Mullenweg et Josepha Haden Chomposy • WPShout
- Épisode # 241 Opal: applications de soins de santé à pile complète
- 6 raisons impérieuses WordPress est la meilleure plate-forme pour votre site
Dans la syntaxe de montage unittest et la référence de flux, je n’ai présenté que des méthodes et des fonctions de montage qui ne contenaient aucune exception.
Cependant, dans le code de production réel, il est tout à fait possible que quelque chose se passe mal lors de la configuration des montages de test.
Cet article est simplement une démonstration de ce qu’il advient du flux de votre code de test quand une exception est levée dans une fonction fixture.
Et, pendant que j'y suis, je peux aussi bien faire la démonstration du flux de contrôle normal lorsqu'un test échoue, affirme ou lève une exception.
Pour réduire la taille du code de démonstration, je vais réutiliser le code du message précédent, puis dériver mes classes de test de classe TestFixtures
(également à partir de ce post), et ne surchargez qu'une méthode à la fois pour indiquer un échec.
Si vous voulez suivre, vous voudrez mettre ceci en haut de votre fichier:
from test_fixtures import TestFixtures, setUpModule, tearDownModule
classe DemoException (Exception):
'exception aux échecs de démonstration / test'
passer
de test_fixtures importation TestFixtures, setUpModule, tearDownModule classe DemoException(Exception): 'exception aux échecs de démonstration / test' passer |
J'utilise DemoException
pour représenter un échec dans un appareil. Cependant, une assertion sera traitée de la même manière.
Voyons ce qui suit:
Concept général
L'idée générale est que si un type setUp de méthode / fonction échoue, les tests inclus ne sont PAS exécutés et le tearDown correspondant n'est PAS exécuté.
Si un type de méthode / fonction tearDown échoue, la seule différence est que l'erreur est constatée et que le test échoue.
exception dans setUp ()
Le module et les fixtures au niveau de la classe sont appelés, comme ils le feraient dans de bons cas.
Nous voyons setUp être appelé pour les deux tests.
Étant donné que la configuration échoue, aucun des tests n'est exécuté.
Et la méthode tearDown n'est pas exécutée pour l'un ou l'autre test.
classe TestExceptionInSetUp (TestFixtures):
def setUp (auto):
TestFixtures.setUp (auto)
lever une exception démo
classe TestExceptionInSetUp(TestFixtures): def installer(soi): TestFixtures.installer(soi) élever DemoException |
Sortie
> python -m unittest -q test_fixture_failure.TestExceptionInSetUp
dans le module test_fixtures – setUpModule ()
dans la classe TestExceptionInSetUp – setUpClass ()
dans test_1 – setUp ()
dans test_2 – setUp ()
dans la classe TestExceptionInSetUp – tearDownClass ()
dans le module test_fixtures – tearDownModule ()
=============================================== =====================
ERREUR: test_1 (test_fixture_failure.TestExceptionInSetUp)
un examen
————————————————– ——————–
Traceback (dernier appel le plus récent):
Fichier "test_fixture_failure.py", ligne 22, dans setUp
lever une exception démo
DemoException
=============================================== =====================
ERREUR: test_2 (test_fixture_failure.TestExceptionInSetUp)
un autre test
————————————————– ——————–
Traceback (dernier appel le plus récent):
Fichier "test_fixture_failure.py", ligne 22, dans setUp
lever une exception démo
DemoException
————————————————– ——————–
A couru 2 tests en 0.014s
FAILED (errors = 2)
1 2 3 4 5 6 7 8 9 dix 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
>python –m Test de l'unité –q test_fixture_failure.TestExceptionInSetUp dans module test_fixtures – setUpModule() dans classe TestExceptionInSetUp – setUpClass() dans test_1 – installer() dans test_2 – installer() dans classe TestExceptionInSetUp – tearDownClass() dans module test_fixtures – tearDownModule() ====================================================================== ERREUR: test_1 (test_fixture_failure.TestExceptionInSetUp) une tester ––––––––––––––––––––––––––––––––––– Traceback (plus récent appel dernier): Fichier "test_fixture_failure.py", ligne 22, dans installer élever DemoException DemoException ====================================================================== ERREUR: test_2 (test_fixture_failure.TestExceptionInSetUp) un autre tester ––––––––––––––––––––––––––––––––––– Traceback (plus récent appel dernier): Fichier "test_fixture_failure.py", ligne 22, dans installer élever DemoException DemoException ––––––––––––––––––––––––––––––––––– Couru 2 tests dans 0.014s ÉCHOUÉ (les erreurs=2) |
exception dans tearDown ()
Le flux semble identique à un scénario de test réussi, mais l'exception tearDown entraîne l'échec des deux tests.
classe TestExceptionInTearDown (TestFixtures):
def tearDown (auto):
TestFixtures.tearDown (auto)
lever une exception démo
classe TestExceptionInTearDown(TestFixtures): def abattre(soi): TestFixtures.abattre(soi) élever DemoException |
Sortie
> python -m unittest -q test_fixture_failure.TestExceptionInTearDown
dans le module test_fixtures – setUpModule ()
dans la classe TestExceptionInTearDown – setUpClass ()
dans test_1 – setUp ()
dans test_1 – test_1 ()
dans test_1 – tearDown ()
dans test_2 – setUp ()
dans test_2 – test_2 ()
dans test_2 – tearDown ()
dans la classe TestExceptionInTearDown – tearDownClass ()
dans le module test_fixtures – tearDownModule ()
=============================================== =====================
ERREUR: test_1 (test_fixture_failure.TestExceptionInTearDown)
un examen
————————————————– ——————–
Traceback (dernier appel le plus récent):
Fichier "test_fixture_failure.py", ligne 27, dans tearDown
lever une exception démo
DemoException
=============================================== =====================
ERREUR: test_2 (test_fixture_failure.TestExceptionInTearDown)
un autre test
————————————————– ——————–
Traceback (dernier appel le plus récent):
Fichier "test_fixture_failure.py", ligne 27, dans tearDown
lever une exception démo
DemoException
————————————————– ——————–
A couru 2 tests en 0.020s
FAILED (errors = 2)
1 2 3 4 5 6 7 8 9 dix 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
>python –m Test de l'unité –q test_fixture_failure.TestExceptionInTearDown dans module test_fixtures – setUpModule() dans classe TestExceptionInTearDown – setUpClass() dans test_1 – installer() dans test_1 – test_1() dans test_1 – abattre() dans test_2 – installer() dans test_2 – test_2() dans test_2 – abattre() dans classe TestExceptionInTearDown – tearDownClass() dans module test_fixtures – tearDownModule() ====================================================================== ERREUR: test_1 (test_fixture_failure.TestExceptionInTearDown) une tester ––––––––––––––––––––––––––––––––––– Traceback (plus récent appel dernier): Fichier "test_fixture_failure.py", ligne 27, dans abattre élever DemoException DemoException ====================================================================== ERREUR: test_2 (test_fixture_failure.TestExceptionInTearDown) un autre tester ––––––––––––––––––––––––––––––––––– Traceback (plus récent appel dernier): Fichier "test_fixture_failure.py", ligne 27, dans abattre élever DemoException DemoException ––––––––––––––––––––––––––––––––––– Couru 2 tests dans 0.020s ÉCHOUÉ (les erreurs=2) |
exception dans setUpClass ()
Les modules sont exécutés normalement, mais rien d’autre.
Classe TestExceptionInSetUpClass (TestFixtures):
@classmethod
def setUpClass (cls):
TestFixtures.setUpClass ()
lever une exception démo
classe TestExceptionInSetUpClass(TestFixtures): @méthode de classe def setUpClass(cls): TestFixtures.setUpClass() élever DemoException |
Sortie
> python -m unittest -q test_fixture_failure.TestExceptionInSetUpClass
dans le module test_fixtures – setUpModule ()
dans la classe TestFixtures – setUpClass ()
dans le module test_fixtures – tearDownModule ()
=============================================== =====================
ERREUR: setUpClass (test_fixture_failure.TestExceptionInSetUpClass)
————————————————– ——————–
Traceback (dernier appel le plus récent):
Fichier "test_fixture_failure.py", ligne 11, dans setUpClass
lever une exception démo
DemoException
————————————————– ——————–
A couru 0 tests en 0.010s
FAILED (errors = 1)
1 2 3 4 5 6 7 8 9 dix 11 12 13 14 15 16 17 |
>python –m Test de l'unité –q test_fixture_failure.TestExceptionInSetUpClass dans module test_fixtures – setUpModule() dans classe TestFixtures – setUpClass() dans module test_fixtures – tearDownModule() ====================================================================== ERREUR: setUpClass (test_fixture_failure.TestExceptionInSetUpClass) ––––––––––––––––––––––––––––––––––– Traceback (plus récent appel dernier): Fichier "test_fixture_failure.py", ligne 11, dans setUpClass élever DemoException DemoException ––––––––––––––––––––––––––––––––––– Couru 0 tests dans 0.010s ÉCHOUÉ (les erreurs=1) |
exception dans tearDownClass ()
Flux de test complet comme dans de bons tests normaux, mais l'erreur est notée et le test échoue.
Classe TestExceptionInTearDownClass (TestFixtures):
@classmethod
def tearDownClass (cls):
TestFixtures.tearDownClass ()
lever une exception démo
classe TestExceptionInTearDownClass(TestFixtures): @méthode de classe def tearDownClass(cls): TestFixtures.tearDownClass() élever DemoException |
Sortie
> python -m unittest -q test_fixture_failure.TestExceptionInTearDownClass
dans le module test_fixtures – setUpModule ()
dans la classe TestExceptionInTearDownClass – setUpClass ()
dans test_1 – setUp ()
dans test_1 – test_1 ()
dans test_1 – tearDown ()
dans test_2 – setUp ()
dans test_2 – test_2 ()
dans test_2 – tearDown ()
dans la classe TestFixtures – tearDownClass ()
dans le module test_fixtures – tearDownModule ()
=============================================== =====================
ERREUR: tearDownClass (test_fixture_failure.TestExceptionInTearDownClass)
————————————————– ——————–
Traceback (dernier appel le plus récent):
Fichier "test_fixture_failure.py", ligne 17, dans tearDownClass
lever une exception démo
DemoException
————————————————– ——————–
A couru 2 tests en 0.020s
FAILED (errors = 1)
1 2 3 4 5 6 7 8 9 dix 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
>python –m Test de l'unité –q test_fixture_failure.TestExceptionInTearDownClass dans module test_fixtures – setUpModule() dans classe TestExceptionInTearDownClass – setUpClass() dans test_1 – installer() dans test_1 – test_1() dans test_1 – abattre() dans test_2 – installer() dans test_2 – test_2() dans test_2 – abattre() dans classe TestFixtures – tearDownClass() dans module test_fixtures – tearDownModule() ====================================================================== ERREUR: tearDownClass (test_fixture_failure.TestExceptionInTearDownClass) ––––––––––––––––––––––––––––––––––– Traceback (plus récent appel dernier): Fichier "test_fixture_failure.py", ligne 17, dans tearDownClass élever DemoException DemoException ––––––––––––––––––––––––––––––––––– Couru 2 tests dans 0.020s ÉCHOUÉ (les erreurs=1) |
exception dans setUpModule ()
Pour démontrer un échec dans les fonctions du module, j’ai trouvé qu’il était plus simple de copier le fichier test_fixtures.py d’origine et de modifier le setUpModule (ou le tearDownModule).
Sans surprise, une fois setUpModule ()
frappe l'exception, rien d'autre n'est exécuté.
le tearDownModule ()
est également non exécuté et le test enregistre une erreur et échoue.
def setUpModule ():
'appelé une fois, avant toute autre chose dans ce module'
logPoint ('module% s'% __name__)
lever une exception démo
def setUpModule(): 'appelé une fois, avant toute autre chose dans ce module' logPoint('modules' % __prénom__) élever DemoException |
Sortie
> python -m unittest -q test_setUpModule_fail.TestFixtures
dans le module test_setUpModule_fail – setUpModule ()
=============================================== =====================
ERREUR: setUpModule (test_setUpModule_fail)
————————————————– ——————–
Traceback (dernier appel le plus récent):
Fichier "test_setUpModule_fail.py", ligne 22, dans setUpModule
lever une exception démo
DemoException
————————————————– ——————–
A couru 0 tests en 0.006s
FAILED (errors = 1)
> python –m Test de l'unité –q test_setUpModule_fail.TestFixtures dans module test_setUpModule_fail – setUpModule() ====================================================================== ERREUR: setUpModule (test_setUpModule_fail) ––––––––––––––––––––––––––––––––––– Traceback (plus récent appel dernier): Fichier "test_setUpModule_fail.py", ligne 22, dans setUpModule élever DemoException DemoException ––––––––––––––––––––––––––––––––––– Couru 0 tests dans 0.006s ÉCHOUÉ (les erreurs=1) |
exception dans tearDownModule ()
Puisque tearDownModule ()
est la dernière chose à appeler lors de l’exécution d’un seul module de tests, nous voyons que tout le flux ressemble au bon exemple. Cependant, unittest reconnaît l'erreur et échoue le résultat global.
def tearDownModule ():
'appelé une fois, après tout le reste de ce module'
logPoint ('module% s'% __name__)
lever une exception démo
def tearDownModule(): 'appelé une fois, après tout le reste de ce module' logPoint('modules' % __prénom__) élever DemoException |
Sortie
> python -m unittest -q test_tearDownModule_fail.TestFixtures
dans le module test_tearDownModule_fail – setUpModule ()
dans la classe TestFixtures – setUpClass ()
dans test_1 – setUp ()
dans test_1 – test_1 ()
dans test_1 – tearDown ()
dans test_2 – setUp ()
dans test_2 – test_2 ()
dans test_2 – tearDown ()
dans la classe TestFixtures – tearDownClass ()
dans le module test_tearDownModule_fail – tearDownModule ()
=============================================== =====================
ERREUR: tearDownModule (test_tearDownModule_fail)
————————————————– ——————–
Traceback (dernier appel le plus récent):
Fichier "test_tearDownModule_fail.py", ligne 26, dans tearDownModule
lever une exception démo
DemoException
————————————————– ——————–
A couru 2 tests en 0.019s
FAILED (errors = 1)
1 2 3 4 5 6 7 8 9 dix 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
> python –m Test de l'unité –q test_tearDownModule_fail.TestFixtures dans module test_tearDownModule_fail – setUpModule() dans classe TestFixtures – setUpClass() dans test_1 – installer() dans test_1 – test_1() dans test_1 – abattre() dans test_2 – installer() dans test_2 – test_2() dans test_2 – abattre() dans classe TestFixtures – tearDownClass() dans module test_tearDownModule_fail – tearDownModule() ====================================================================== ERREUR: tearDownModule (test_tearDownModule_fail) ––––––––––––––––––––––––––––––––––– Traceback (plus récent appel dernier): Fichier "test_tearDownModule_fail.py", ligne 26, dans tearDownModule élever DemoException DemoException ––––––––––––––––––––––––––––––––––– Couru 2 tests dans 0.019s ÉCHOUÉ (les erreurs=1) |
échec à un test
Pour les échecs de test, les assertions et les exceptions, je voulais simplement démontrer que tous les appareils de test sont exécutés, quel que soit le résultat de la méthode de test.
Classe TestFailInTest (TestFixtures):
def test_1 (auto):
TestFixtures.test_1 (auto)
self.fail ()
classe TestFailInTest(TestFixtures): def test_1(soi): TestFixtures.test_1(soi) soi.échouer() |
Sortie
> python -m unittest -q test_fixture_failure.TestFailInTest
dans le module test_fixtures – setUpModule ()
dans la classe TestFailInTest – setUpClass ()
dans test_1 – setUp ()
dans test_1 – test_1 ()
dans test_1 – tearDown ()
dans test_2 – setUp ()
dans test_2 – test_2 ()
dans test_2 – tearDown ()
dans la classe TestFailInTest – tearDownClass ()
dans le module test_fixtures – tearDownModule ()
=============================================== =====================
FAIL: test_1 (test_fixture_failure.TestFailInTest)
————————————————– ——————–
Traceback (dernier appel le plus récent):
Fichier "test_fixture_failure.py", ligne 37, dans test_1
self.fail ()
AssertionError: None
————————————————– ——————–
A couru 2 tests en 0.019s
FAILED (échecs = 1)
1 2 3 4 5 6 7 8 9 dix 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
> python –m Test de l'unité –q test_fixture_failure.TestFailInTest dans module test_fixtures – setUpModule() dans classe TestFailInTest – setUpClass() dans test_1 – installer() dans test_1 – test_1() dans test_1 – abattre() dans test_2 – installer() dans test_2 – test_2() dans test_2 – abattre() dans classe TestFailInTest – tearDownClass() dans module test_fixtures – tearDownModule() ====================================================================== ÉCHOUER: test_1 (test_fixture_failure.TestFailInTest) ––––––––––––––––––––––––––––––––––– Traceback (plus récent appel dernier): Fichier "test_fixture_failure.py", ligne 37, dans test_1 soi.échouer() AssertionError: Aucun ––––––––––––––––––––––––––––––––––– Couru 2 tests dans 0.019s ÉCHOUÉ (les échecs=1) |
affirmer dans un test
Classe TestAssertInTest (TestFixtures):
def test_1 (auto):
TestFixtures.test_1 (auto)
affirmer Faux
classe TestAssertInTest(TestFixtures): def test_1(soi): TestFixtures.test_1(soi) affirmer Faux |
Sortie
> python -m unittest -q test_fixture_failure.TestAssertInTest
dans le module test_fixtures – setUpModule ()
dans la classe TestAssertInTest – setUpClass ()
dans test_1 – setUp ()
dans test_1 – test_1 ()
dans test_1 – tearDown ()
dans test_2 – setUp ()
dans test_2 – test_2 ()
dans test_2 – tearDown ()
dans la classe TestAssertInTest – tearDownClass ()
dans le module test_fixtures – tearDownModule ()
=============================================== =====================
FAIL: test_1 (test_fixture_failure.TestAssertInTest)
————————————————– ——————–
Traceback (dernier appel le plus récent):
Fichier "test_fixture_failure.py", ligne 42, dans test_1
affirmer Faux
AssertionError
————————————————– ——————–
A couru 2 tests en 0.020s
FAILED (échecs = 1)
1 2 3 4 5 6 7 8 9 dix 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
> python –m Test de l'unité –q test_fixture_failure.TestAssertInTest dans module test_fixtures – setUpModule() dans classe TestAssertInTest – setUpClass() dans test_1 – installer() dans test_1 – test_1() dans test_1 – abattre() dans test_2 – installer() dans test_2 – test_2() dans test_2 – abattre() dans classe TestAssertInTest – tearDownClass() dans module test_fixtures – tearDownModule() ====================================================================== ÉCHOUER: test_1 (test_fixture_failure.TestAssertInTest) ––––––––––––––––––––––––––––––––––– Traceback (plus récent appel dernier): Fichier "test_fixture_failure.py", ligne 42, dans test_1 affirmer Faux AssertionError ––––––––––––––––––––––––––––––––––– Couru 2 tests dans 0.020s ÉCHOUÉ (les échecs=1) |
exception dans un test
Classe TestExceptionInTest (TestFixtures):
def test_1 (auto):
TestFixtures.test_1 (auto)
lever une exception démo
classe TestExceptionInTest(TestFixtures): def test_1(soi): TestFixtures.test_1(soi) élever DemoException |
Sortie
> python -m unittest -q test_fixture_failure.TestExceptionInTest
dans le module test_fixtures – setUpModule ()
dans la classe TestExceptionInTest – setUpClass ()
dans test_1 – setUp ()
dans test_1 – test_1 ()
dans test_1 – tearDown ()
dans test_2 – setUp ()
dans test_2 – test_2 ()
dans test_2 – tearDown ()
dans la classe TestExceptionInTest – tearDownClass ()
dans le module test_fixtures – tearDownModule ()
=============================================== =====================
ERREUR: test_1 (test_fixture_failure.TestExceptionInTest)
————————————————– ——————–
Traceback (dernier appel le plus récent):
Fichier "test_fixture_failure.py", ligne 32, dans test_1
lever une exception démo
DemoException
————————————————– ——————–
A couru 2 tests en 0.020s
FAILED (errors = 1)
1 2 3 4 5 6 7 8 9 dix 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
>python –m Test de l'unité –q test_fixture_failure.TestExceptionInTest dans module test_fixtures – setUpModule() dans classe TestExceptionInTest – setUpClass() dans test_1 – installer() dans test_1 – test_1() dans test_1 – abattre() dans test_2 – installer() dans test_2 – test_2() dans test_2 – abattre() dans classe TestExceptionInTest – tearDownClass() dans module test_fixtures – tearDownModule() ====================================================================== ERREUR: test_1 (test_fixture_failure.TestExceptionInTest) ––––––––––––––––––––––––––––––––––– Traceback (plus récent appel dernier): Fichier "test_fixture_failure.py", ligne 32, dans test_1 élever DemoException DemoException ––––––––––––––––––––––––––––––––––– Couru 2 tests dans 0.020s ÉCHOUÉ (les erreurs=1) |
Retour d'information
Comme toujours, laissez-moi savoir si l'une de ces informations est incorrecte ou trompeuse.
À votre santé.
[ad_2]