- 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 créer les premiers tests, donc les tests de base, sur par exemple lafonction pour tester le nom complet de l'utilisateur ou encore la fonction pour l'instance dans notrebase de données. Donc on va commencer ces tests, on va tester déjà le nom complet. Donc pour le nom
00:00:15 :complet, on va utiliser ce features ici, donc on va utiliser notre utilisateur Patrick Martin.Donc je vais mettre le nom du features à l'intérieur des parenthèses et comme ça on vapouvoir utiliser notre utilisateur que l'on retourne ici dans ce features à l'intérieur de cettefonction de test. Donc qu'est-ce qu'on va vérifier ici ? Eh bien tout simplement si le nom complet
00:00:33 :de notre utilisateur, donc si user.fullname est égal à la chaîne de caractère Patrick Martin,puisque si on retourne dans le fichier crm.py, notre propriété fullname ici, elle va retourner
00:00:45 :le prénom et le nom de famille séparés par un espace. Donc dans le cas de cet utilisateur ici,on a Patrick pour le prénom, Martin pour le nom de famille, donc logiquement on devrait s'attendreà avoir pour le nom complet la chaîne de caractère Patrick Martin. Donc je vais vérifier si ça
00:00:59 :fonctionne, je vais lancer uniquement ce test, donc le test fullname. Pour ça PyCharm noussimplifie la vie, on peut cliquer sur la petite flèche dans la marge et je vais lancer le testuniquement pour cette fonction. Donc le test fonctionne correctement, on voit qu'on a toutes
00:01:11 :les checkmarks ici qui sont vertes et on voit qu'on a un test qui a été correctement effectué. Donc làc'est ce que vous voyez avec le mot pass, ça veut dire que le test est correct. Pour vous montrer ce
00:01:21 :que ça donne si le test n'est pas correct, donc par exemple si je modifie ma fonction crm pourà la place de un espace mettre un point par exemple, donc là on modifie notre script crm eton va pouvoir vérifier avec les tests si notre script fonctionne toujours comme prévu. Et donc là
00:01:36 :si je relance cet unitest ici, là vous voyez que cette fois-ci le test ne fonctionne pas puisqu'ons'attendait à avoir Patrick avec un espace et Martin et à la place on a Patrick.Martin. Donc
00:01:46 :vous voyez l'intérêt des tests, ça permet de vérifier à chaque fois qu'on fait un changementdans notre code s'il fonctionne toujours comme on le souhaitait. Donc là moi je vais remettre ici
00:01:54 :l'espace entre les deux et on a bien notre test ici qui fonctionne puisque si je relance ici doncvoilà le test fonctionne correctement. Donc ça c'est pour le test du nom complet, on pourrait
00:02:04 :également tester chaque paramètre ici, ça pourrait être quelque chose d'assez intéressant à fairepour vérifier que quand on crée une instance de notre classe on a bien ensuite les attributs quisont correctement définis. Donc on pourrait rajouter des tests ici, dire par exemple test
00:02:17 :firstname et utiliser donc le fixtures là encore de l'utilisateur donc user et on pourrait direassert to user.firstname est égal à Patrick. Là encore si je lance ce test uniquement ça
00:02:30 :devrait fonctionner puisqu'on a bien notre attribut firstname qui est instancié ici dansla classe init. Là encore je vais vous montrer en supprimant cette ligne que notre test ne
00:02:38 :fonctionnera plus puisqu'on a cette fois un paramètre firstname qui n'est plus attaché ànotre instance. Donc là si je relance les tests en cliquant sur la flèche verte on voit qu'on a
00:02:46 :bien le test qui échoue. Donc on a fait ça pour le firstname, on pourrait le faire pour tous lesautres attributs ici pour lastname, pour address et pour phone number. Donc si ça vous tente de
00:02:55 :refaire ces tests pour les autres paramètres vous pouvez les faire c'est vraiment exactement la mêmechose qu'ici donc sur ce modèle avec à chaque fois la vérification que l'attribut en questionest bien égal à la chaîne de caractère que l'on a donné ici dans l'instantiation de notre classe.
00:03:08 :Moi je vais pas tous les faire ici je vais les laisser on va juste tester le fullname et lefirstname et ensuite par contre je vais tester d'autres choses comme par exemple est-ce que monutilisateur existe. Donc on va prendre cette fonction ici je vais la rapprocher un peu plus
00:03:22 :de mes tests ici voilà pour qu'on ait tout au même endroit. Donc ce qu'on va vérifier ici c'estest-ce que notre utilisateur existe dans la base de données. Donc par défaut il devrait exister
00:03:31 :puisque là on a fait un save donc si on va voir dans notre crm.py ici quand on fait un save sil'utilisateur n'est pas dans la base de données donc s'il n'existe pas et bien on va l'ajouter.
00:03:41 :Donc ce que je vais faire à l'intérieur de test existe c'est vérifier si mon utilisateur existedonc on va dire assert de user.existe is true. Donc ça ça devrait être bon puisque si on lance
00:03:54 :ce test on a bien sauvegardé notre utilisateur dans la base de données donc je lance ce testet là on a une erreur alors c'est normal c'est parce que je n'ai pas mis le features ici entreles parenthèses donc forcément quand je mets user ici il va utiliser en fait cette fonction
00:04:08 :directement plutôt que le paramètre. Donc là je vais mettre user à l'intérieur des parenthèsespour qu'on spécifie bien qu'on veut utiliser le features et donc qu'on souhaite utiliserl'utilisateur qui est retourné. Donc là je vais relancer ce test et cette fois ci ça devrait
00:04:20 :fonctionner. Donc là on a vérifié que quand on crée un utilisateur et qu'on le sauvegarde dansla base de données l'utilisateur existe. Maintenant on va vérifier l'inverse on va vérifier en fait
00:04:29 :que si on ne sauvegarde pas l'utilisateur et bien il n'existe pas dans la base de données. Donc làje vais mettre un not on va dire test not existe et on ne va pas utiliser le features puisque cefeatures ici il sauvegarde notre utilisateur dans la base de données. Donc je vais tout simplement
00:04:43 :copier ces lignes ici et pour ce test précisément on ne va pas utiliser notre features et à laplace on va créer un utilisateur donc là on peut mettre autre chose si on veut on peut changer lesinformations ce n'est pas très important. Dans ce cas ci ce que je veux c'est juste créer une
00:04:57 :instance d'un utilisateur ne pas le sauvegarder dans la base de données cette fois ci et doncsi on ne le sauvegarde pas dans ce cas ci u.existe va être égal à false. Donc on va vérifier ce
00:05:07 :test donc là je fais u.existe is false puisqu'on n'a pas sauvegardé notre utilisateur dans la basede données. Donc je lance le test et voilà vous voyez que notre test fonctionne. Donc vous voyez
00:05:17 :qu'on commence à rajouter des tests sur notre classe et là encore vous allez voir tout l'intérêtde faire ces tests puisque imaginez que par la suite quelqu'un se dise que ça peut être unebonne idée par exemple dès qu'on initialise notre instance de sauvegarder l'utilisateur dans la basede données. Donc là on pourrait mettre un self.save directement dans le unit mais si on fait ça et
00:05:35 :bien on va casser nos tests puisque là notre test ici le test not exist et bien il n'est pas censéavoir le exist qui est égal à false quand on crée un utilisateur. Mais là si je relance ce test
00:05:46 :uniquement maintenant que j'ai rajouté le save et bien quand on crée une instance de notreutilisateur à partir de la classe automatiquement l'utilisateur va être sauvegardé dans la basede données. Donc notre test ici ne sera plus valide. Donc je relance ce test et vous allez
00:05:58 :voir que cette fois ci notre test n'est plus valide. Vous voyez qu'ici il indique assert trueis false puisque u.exist dans ce cas ci est égal à true puisque dès qu'on crée notre instance
00:06:08 :donc dès qu'on crée notre instance ici on sauvegarde l'utilisateur dans la base de données. Donc làdans ce cas ci le test devrait être vrai donc on devrait avoir true ici et dans ce cas ci on atrue is false donc ça ne fonctionne plus. Donc dans un cas comme celui ci quand on a introduit une
00:06:22 :erreur c'est à vous de voir ce que vous souhaitez faire. Est-ce que vous souhaitez garder cette façonde faire ? Donc vous allez parler avec votre équipe et vous vous dites bon ok on a rajouté cette
00:06:29 :fonctionnalité qu'est ce qu'on veut faire ? Est-ce que c'est bien ce qu'on veut faire ? Est-ce qu'onveut sauvegarder l'utilisateur et donc l'avoir directement dans la base de données quand on créeune instance auquel cas on peut laisser le save ici mais dans ce cas il faudra changer notre test
00:06:41 :pour la mettre true ou alors vous vous dites non c'est une erreur le développeur ne devait pasmettre le save ici et heureusement qu'on avait fait des tests puisque ça nous a permis grâceà ce test unitaire de vérifier que notre script ne fonctionnait pas comme auparavant. Donc là si
00:06:55 :j'enlève le self.save et que je relance mon test cette fois ci ça va fonctionner et il sera valide.Alors là il n'est pas valide pourquoi ? Peut-être juste parce que ça n'a pas eu le temps de
00:07:04 :sauvegarder puisque PyCharm sauvegarde automatiquement donc je vais relancer letest. Alors là vous voyez que mon test me contredit puisqu'il n'est pas valide et en
00:07:12 :fait je sais pourquoi c'est parce qu'on n'a pas mis le setup DB à l'intérieur de notre test. Doncquand on ne met pas le setup DB par défaut il va utiliser notre base de données ici et comme enfait on avait déjà fait un test sans mettre le setup DB il a dû ajouter quand on a fait le save
00:07:26 :l'utilisateur dans la base de données. Donc si je descends tout en bas vous voyez qu'on a bienrajouté Patrick Martin ici donc en fait ce que ça fait c'est que quand on va lancer notre test ilva utiliser le fichier db.json et notre utilisateur sera présent dans la base de données puisqu'on
00:07:40 :l'avait ajouté précédemment. Donc là je vais mettre setup DB pour utiliser le features qu'onavait créé précédemment qui va utiliser la base de données en mémoire et la base de données enmémoire à chaque fois qu'on relance nos tests elle est recréée elle ne contient rien. Donc là
00:07:53 :si on relance ce test précisément l'utilisateur ne va pas exister et comme on ne le sauvegarde pasici dans le init et qu'on ne le sauvegarde pas ici et bien effectivement u.exist sera false. Donc je
00:08:03 :relance le test et cette fois-ci j'espère voilà effectivement ça marche puisqu'on utilise biendonc la base de données en mémoire. Donc vous voyez les tests beaucoup de choses à prendre en
00:08:12 :compte il faut faire très attention avec les fixtures avec votre code ce que vous changezpour vous assurer que vos tests fonctionnent comme prévu. Donc là on a fait le test sur le
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.