Apprendre les tests unitaires
Bonjour à tous.
J'aimerais beaucoup intégrer les tests unitaires dans mes methodes des programmation. Très frequement je reviens sur du code écrit pour l'optimiser, ajouter des possibilité, et repenser à tous les scénario de test pour les valider prend beaucoup de temps, et soyons honnete, ce n'est pas fiable à 100%, comme Laravel integre d'origine le système c'est clairement une raison de plus de s'y mettre.
Avez vous des liens ou vidéos encore d'actualité sur le sujet, car je tombe frequements sur des méthodes qui n'hésite plus.
J'ai surtout besoin de pouvoir tester mes controlleurs, qu'ils soit GET ou POST, mais également les méthodes des différentes classes d'helper que je créer pour chacun de mes projets.
Merci
Personne les utilises sur le forum ?
Désolé KYoann,
Moi je suis une bille. J'ai jamais utilisé. Il faudrait que je m'y mette aussi. :)
On va se motiver à deux !!!
Moi j'aimerais comprendre comment executer un test sur un controller entier, faut'il ecrire un test qui accède à l'url traité par le controller ou faire un test directement sur le controller ?
A chaque fois que je regarde des vidéo a propos des test unitaires, les exemples sont assez en décalage par rapport à des projets complets.
Bonjour, j'ai commencé à utiliser les tests unitaires PHPUnit pour ma grosse appli Laravel (simulateur d'élevage de chevaux avec 30 tables dans la base de données), et je peux vous dire que je ne regrette qu'une chose, c'est de ne pas les avoir utilisés dès le début de mon projet! C'est pas très malin d'être obligée de faire tourner l'appli plus 20 années virtuelles (mois par mois) pour vérifier que les chevaux meurent bien de vieillesse... Et en plus, vous savez quoi? Je trouve ça amusant!
J'ai suivi un tuto openclassrooms sur les tests unitaires PHPUnit avec Symfony (je pratique aussi, même si je préfère Laravel), et ensuite avec la documentation officielle de Laravel j'ai trouvé comment faire avec ce framework.
Salut,
Mon premier conseil : différencier test fonctionnel et test unitaire.
Un test fonctionnel va tester une fonctionnalité de ton appli, par exemple un point d'entrée d'une api : /api/v1/articles Typiquement ils vont appeler les méthodes de tes controllers et vérifier le résultat avec des assertions (une assertion c'est ce qui permet de dire si le test passe ou pas, binaire). Les classes impliquées dans ton test peuvent être nombreuses, et débeuguer un test fonctionnel peut être compliqué.
Un test unitaire va tester une classe, et à priori toutes ses fonctions publiques. Utiliser à gogo les mocks et faire un truc inmaintenable qui sera couplé à ton code comme c'est pas permis (t'oseras plus changer une ligne de code ou le refactoriser parce que derrière t'auras 20 tests unitaires à modifier, le comble en sachant que les tests sont censés te donner la confiance de modifier ton code à volonté).
Autant les tests fonctionnels me semblent indispensables, autant les tests unitaires faut vraiment les réserver pour les méthodes complexes avec des algorithmes complexes. Tu peux toujours découper tes tests fonctionnels en sous-fonctionnalités.
L'outil de base pour tes tests en PHP c'est PHPUnit (directement inspiré de JUnit pour Java). Il porte mal son nom parce qu'il fait très bien le job pour les tests fonctionnels. Avant de vouloir tester avec Laravel faut que tu maîtrises PHPUnit, c'est la condition indispensable. Après tu feras ta propre API de test et y'a même moyen de trouver ça fun, mais l'apprentissage est long (du coup plus tôt tu commences, mieux c'est, donc lance-toi).
Sinon à quoi servent les tests ? Sont-ils indispensables ? => oui. La qualité première d'un code, en dehors de codes spécifiques comme le jeu vidéo où la performance est plus importante que la maintenabilité, c'est d'être évolutif (un code qui évolue pas au contact des utilisateurs c'est un code mort). Et pour être évolutif, faut des tests de régression les plus complets possibles. Et pour avoir des tests de régression les plus complets possibles, faut les automatiser, sinon ça coûte trop cher. Et c'est d'autant plus important quand plusieurs personnes travaillent sur la même appli (après tu pourras te pencher sur l'intégration continue).
ChristineZedday
Merci pour ce témoignage !!
F.M.
Merci également pour ce retour d'information, je vais commencer par écrire des test fonctionnels pour des helpers créer pour des actions bien précise, ca peut être un bon point d'entrée en la matière.
En parallèle je vais me pencher sur les test unitaires, sur les controller CRUD pas trop compliqué, ont verra bien si j'arrive à ce qu'ils ne deviennent pas des usines à Gaz pour ne pas tomber dans les scénario que tu décris.
Jeffrey a fait un super cours sur les tests si jamais ça t'intéresse : https://laracasts.com/series/phpunit-testing-in-laravel
Vous ne pouvez pas répondre à ce sujet.