- Formations
- conversion_path Parcours & Formations
- science Projets
- data_object Exercices de code
- psychology Exercices IA
- quiz Quiz
- Articles
- rss_feed Blog
- sort_by_alpha Glossaire
- menu_book Guides
- help_center FAQ
- media_link Ressources
- Communauté
- groups La communauté
- forum Questions
- live_tv Mentorats
- science Projets mensuels
- Formations
- conversion_path Parcours & Formations
- science Projets
- data_object Exercices de code
- psychology Exercices IA
- quiz Quiz
- Articles
- rss_feed Blog
- sort_by_alpha Glossaire
- menu_book Guides
- help_center FAQ
- media_link Ressources
- Communauté
- groups La communauté
- forum Questions
- live_tv Mentorats
- science Projets mensuels
Deviens membre Premium magic_button
Débloque cette session en devenant Membre Premium 🚀
Inscris-toi
(c'est gratuit !)
Un compte est nécessaire pour participer aux discussions.
Créer un compte person00:00:00 :Dans cette partie, on va tester la fonction Check Phone Number et la fonction Check Names.Donc ce sont des fonctions un peu spéciales puisque ces fonctions vont lever des erreursdans le cas où on n'a pas des informations qui sont valides.
00:00:12 :Donc quand on a par exemple un numéro de téléphone qui contient moins de 10 caractèresou qui ne contient pas que des nombres.Et pour les noms ici, on va vérifier qu'on a bien un first name et un last nameet qu'on n'a pas de caractères spéciaux à l'intérieur de ces éléments.
00:00:24 :Donc pour ça, on va utiliser des utilisateurs, des utilisateurs corrects et des utilisateurs incorrects.Avant ça, on va mettre le setup DB dans les parenthèses ici pour utiliser notre base de données en mémoire.
00:00:35 :Et pour la fonction Check Phones, je vais utiliser deux utilisateurs.Donc comme je vous disais, un qui est correct et un qui est incorrect.Donc le premier correct ici, je l'ai appelé UserGood.
00:00:45 :Il a un numéro de téléphone ici qui est valide, donc 0123456789.Et on a UserBad qui lui n'est pas correct puisqu'il a un numéro de téléphone qui est ABCD.
00:00:54 :Donc on va pouvoir tester ces deux cas de figure dans notre fonction de test icipour vérifier que celui-là fonctionne et que celui-là ne fonctionne pas et lève une erreur.
00:01:03 :Donc on va déjà tester l'erreur qui est retournée avec UserBad.Pour tester qu'on a une erreur qui est levée avec PyTest, on va utiliser un context manager.
00:01:12 :Donc le fameux WIT qu'on retrouve quand on va ouvrir des fichiers par exemple.On va utiliser cette façon de faire pour vérifier qu'une erreur est bien levée.
00:01:19 :Donc on va faire with PyTest.raises et on va mettre le nom de l'erreur qu'on souhaite vérifier.Donc là dans ce cas-ci, si on retourne dans crm.py,
00:01:27 :on voit que quand on a un numéro de téléphone qui n'est pas valide,on a une erreur de type valueError qui renvoie ce message d'erreur.
00:01:34 :Donc on va vérifier qu'on a bien une erreur de type valueErroret on va également vérifier qu'on a bien ce message d'erreur qui nous est retourné.
00:01:40 :Donc ici je fais with PyTest.raises valueErroret on va récupérer l'erreur en tant que telle dans une variable qu'on va appeler R comme ceci.Donc E avec deux R. C'est une convention que vous retrouverez assez souvent.
00:01:52 :On peut retrouver aussi généralement la variable E.Ici c'est vraiment juste un nom de variable.On pourrait l'appeler là encore Patrick si on le souhaitait.
00:01:59 :Moi je vais l'appeler R ici comme ceci.Et c'est grâce à cette variable qu'on va pouvoir vérifier qu'on a bien le bon message d'erreur qui nous est retourné.
00:02:06 :Donc là qu'est-ce que je vais faire avec ce with, donc avec ce context manager ?Eh bien on va indiquer à l'intérieur de ce context manager l'élément qui va lever une erreur.
00:02:15 :Donc dans ce cas-ci ça peut être plusieurs choses.On pourrait utiliser directement cette fonction check phone numbers.On pourrait également utiliser cette fonction checks puisqu'elle va appeler la fonction check phone numbers.
00:02:24 :Ou on pourrait encore faire un save en mettant le valider data qui est égal à truepuisque quand on fait un save et qu'on souhaite valider les datas, ça va appeler checks et checks va appeler phone number.
00:02:35 :Donc moi dans mon cas je préfère appeler directement check phone numbermais on pourrait passer par ces deux autres fonctions également pour tester ceci.Donc là on va faire tout simplement user bad point check phone numberet donc en appelant cette fonction ça va lever une erreuret on va pouvoir s'assurer que cette erreur est bien de type value error.
00:02:52 :Et une fois qu'on a récupéré donc cette erreur, on va pouvoir continuer.Donc là l'intérêt de faire un context manager c'est que ça va récupérer notre erreur,s'assurer qu'on a bien le bon type d'erreur mais ça ne va pas faire planter notre scriptpuisque si on faisait pas le context manager et qu'on faisait juste ça,
00:03:06 :bah là en fait on aurait une erreur et le test s'arrêterait.Donc là on met tout ça dans ce context manager, ça permet de vérifier qu'on a bien une erreur qui est levéeet par la suite de continuer avec d'autres vérifications.
00:03:16 :Donc dans notre cas on va vérifier que dans notre erreur ici,on a bien le message qui est affiché ici donc numéro de téléphone invalide.
00:03:23 :Donc dans notre cas on va par exemple vérifier qu'on a bien le mot invalideà l'intérieur du message d'erreur.Donc pour ça on va faire un assert et on va vérifier qu'on a la chaîne de caractère invalidedonc je vais la mettre entre guillemets comme ceci.
00:03:35 :Donc on va vérifier qu'on a invalide dans l'erreur et pour ça on va utiliser value.Donc value c'est en fait le texte de l'erreur,donc r.value ici c'est une chaîne de caractère qui correspond au message d'erreur qui nous est retourné ici.
00:03:47 :Et on va vérifier qu'on a bien donc le mot invalide à l'intérieur de ce message d'erreur.Donc je lance mon test ici, on va vérifier que le test fonctionne correctement.
00:03:55 :Donc là ce n'est pas le cas, pourquoi ?Et bien tout simplement parce que je pense que en fait je vous ai dit que ça c'était une chaîne de caractèremais ça ne doit pas être le cas.
00:04:02 :Donc je vais mettre un point de debug ici pour vérifier qu'on peut faire cette vérification,qu'on peut vérifier qu'une chaîne de caractère est présente là dedanset là en fait vous voyez il n'arrive pas à vérifier dedans.
00:04:12 :Donc on va mettre un point de debug, ça me permet de vous montrer le debug de PyCharm dans le cas des tests unitaires.Donc je vais relancer mon test mais cette fois-ci avec le mode debug.
00:04:21 :Comme ça on va arriver jusqu'ici et là vous voyez qu'on a notre erreur et on va regarder à quoi correspond value.Et là vous voyez qu'effectivement value ce n'est pas une chaîne de caractère, c'est un objet de type valueError.
00:04:32 :Donc c'est l'erreur en fait en tant que tel et donc là après on a les arguments etc. et on a la chaîne de caractère.Donc on a un tuple et il me semble en fait qu'on peut convertir cet objet ici valueError en chaîne de caractère tout simplementen faisant donc une class String donc en utilisant la fonction String ici pour convertir cette erreur.
00:04:49 :Donc on va essayer de cette façon, je vais enlever mon point de debug, on va relancer le PyTest.Donc là il me demande si je souhaite arrêter le processus en cours donc je vais dire stop and rerun,ça va stopper le processus de debug et le relancer.
00:05:00 :Et là ça fonctionne donc on a bien notre test qui passe.On va vérifier en enlevant le mot invalide que cette fois-ci ça ne passe pas donc je vais relancer mon test.
00:05:08 :Et là normalement ça ne devrait pas passer et effectivement si on va voir ici voilà il s'attendait à trouver invalide dans l'erreuret là effectivement voilà vous voyez le assertionError, on a la chaîne de caractère ici qui ne contient plus le mot invalideet nous on s'attendait à chercher le mot invalide.
00:05:23 :Donc là on remarque bien que en faisant un String de valueError ça nous retourne la chaîne de caractère du message d'erreur.Donc c'est exactement ce qu'on avait besoin de faire.
00:05:31 :Je vais remettre mon invalide ici pour que mon test repasse, je le relance pour vérifier et là ça fonctionne parfaitement.Donc ça c'était pour vérifier le numéro de téléphone invalide et maintenant on va vérifier le numéro de téléphone valide.
00:05:42 :Donc là il y a différentes façons de faire puisque si je fais un userGood.CheckPhoneNumber,là dans ce cas-ci ça ne va rien nous retourner, on ne va pas lever d'erreur et donc c'est un petit peu difficile dans ce cas-cide vérifier que cette fonction ne retourne pas d'erreur.
00:05:56 :Ce qu'on pourrait faire à la place c'est tout simplement sauvegarder l'utilisateur en mettant le validateData à trueet ensuite on va vérifier si l'utilisateur existe dans la base de données.
00:06:05 :Donc on va faire AssaultTheUserGood.exist et on va vérifier que c'est égal à true.Donc si l'utilisateur existe dans la base de données ça veut dire qu'on a correctement sauvegardé l'utilisateur en validant les donnéesdonc ça veut dire que les données étaient valides et que l'utilisateur a bien été sauvegardé dans la base de données
00:06:21 :donc que le numéro de téléphone était valide.Donc je vais vérifier tout ça, je relance mon test et là on a bien le test qui fonctionne de la même façon.
00:06:29 :On va vérifier en modifiant le phoneNumber donc on va mettre une chaîne de caractère ici, je relance et là le test ne devrait plus fonctionneret c'est normal puisque le numéro de téléphone n'est plus valide.
00:06:38 :Donc ça fonctionne parfaitement, on a nos deux checks, on aurait pu faire deux fonctions séparées,là vous voyez que j'ai fait deux vérifications à l'intérieur de la même fonction, ce n'est pas très grave,on n'a pas énormément de choses ici donc ça peut fonctionner comme ceci.
00:06:50 :Donc voilà pour le numéro de téléphone et maintenant on va vérifier les noms.Donc là j'ai une fonction testCheckNames et j'ai deux choses à vérifier,donc là pour l'exemple je vais le faire en deux fonctions, vous voyez ici on a fait les deux choses,donc les deux vérifications à l'intérieur de la même fonction.
00:07:05 :Dans ce cas-ci comme on a plusieurs vérifications à l'intérieur de CheckNames,on a la vérification que le prénom et le nom de famille ne peuvent pas être videset on a la vérification pour les caractères spéciaux.
00:07:15 :Donc je vais décomposer ça en deux fonctions, on va faire une première fonction qu'on va appeler NamesEmpty par exempleet on va créer un utilisateur avec un prénom et un nom de famille qui sont vides.
00:07:26 :Donc on va faire un utilisateur UserBad, on va avant ça ne pas oublier de mettre notre setupDb comme d'habitudeet on va faire un User qui va avoir FirstName égale à une chaîne de caractère vide,on va mettre LastName également à une chaîne de caractère videet pour l'adresse on va remettre tout simplement ce qu'on avait auparavant,
00:07:43 :donc on va copier les deux lignes ici, Address et PhoneNumber et je vais le mettre à la suite ici.Voilà puisque là on ne vérifie pas en fait l'adresse et le numéro de téléphone,on va juste vérifier le prénom et le nom de famille.
00:07:56 :Donc là on va avoir à peu près la même chose que ce qu'on avait ici,là encore je peux faire un petit copier-coller de mon ContextManager avec l'erreur égalementet je vais le mettre ici puisque la vidéo va être un peu longue et c'est de toute façon la même chose.
00:08:08 :Donc ce qu'on va faire c'est vérifier plutôt que le CheckPhoneNumbers,on va faire le CheckNames, voilà, ça devrait lever une erreur de type ValueError égalementet c'est cette phrase qu'on va vérifier ici.
00:08:20 :Donc là je vais vérifier la phrase au complet,dans ce cas-ci j'avais juste vérifié Invalid puisque là on avait un fStringdonc je ne voulais pas trop m'embêter, on aurait pu vérifier qu'on a bien cette phrase précisémentmais j'ai juste checké le mot Invalid,dans ce cas-ci vu qu'on a juste une chaîne de caractère je la prends au complet
00:08:35 :et on va vérifier qu'on a donc cette chaîne de caractère à l'intérieur de notre erreur.Donc on lance le test,là comme je vous le disais c'est vraiment la même chose qu'avec le numéro de téléphone mais sur un autre testmais sinon c'est vraiment exactement pareil, donc là ça fonctionne
00:08:48 :et on va faire une autre fonction, donc je vais là encore copier tout çaet à la place on va vérifier pour les caractères spéciaux,donc on va dire par exemple SpecialCharactersou on va mettre plutôt InvalidCharacters, c'est plus explicite.
00:09:03 :Donc pour le UserBad ici on va mettre par exemple Patricket on va mettre des caractères spéciaux à la fin,on va mettre pareil pour le LastName, on va mettre des caractères spéciauxet dans ce cas-ci qu'est-ce qu'on a comme erreur ?
00:09:13 :On a NonInvalid, donc je vais vérifier cette erreur ici,à la place de celle-ci, j'enlève ça, je mets NonInvalid,on a encore le CheckNames ici et donc je relanceet là ça fonctionne parfaitementet on pourrait faire une autre fonction qui va vérifier dans le cas où on a un utilisateur qui fonctionne,
00:09:31 :donc cette fois-ci avec des données valides,on pourrait vérifier comme on l'avait fait pour le test avec le numéro de téléphone icique si on sauvegarde l'utilisateur avec des données valides,eh bien l'utilisateur existe dans la base de données.
00:09:42 :Donc je ne vais pas le faire, je vous laisse le faire si vous le souhaitez,ça commence à être un petit peu long, vous voyez que c'est à chaque fois le même processuset c'est vraiment vos décisions, c'est vraiment vous qui devez voircomment vous séparez votre code, ce que vous testez,
00:09:53 :donc vous voyez que c'est ça qui est un petit peu difficile généralement dans les tests unitaires,c'est de savoir ce qu'on va tester et pourquoi on le teste.
00:09:59 :Donc les tests unitaires ne sont pas infaillibles,les tests sont autant faillibles que ce que vous allez faire,donc si vous faites peu de tests, forcément votre code ne sera pas forcément infaillibleet si vous faites beaucoup de tests mais que ce ne sont pas des tests très bien faits,
00:10:11 :là encore vous pourrez potentiellement modifier votre scriptet avoir des erreurs inattendues qui se glissentlorsque vous changez des éléments à l'intérieur de votre script.
00:10:19 :Donc voilà pour ces fonctions de vérificationqui m'ont permis de vous remontrer ici ce Context Managerqui nous permet de vérifier si on a bien les bonnes erreurs qui sont levées,c'est quelque chose qu'il est assez courant de faireet vous voyez que c'est assez facile à faire grâce à PyTest.
Ce n'est pas fini...
✋
Tu as complété % du parcours 🔥
Termine l'intégralité de la formation pour pouvoir débloquer ton attestation de réussite.