Autour de Laravel

Apprendre les tests unitaires

Avatar de KYoann
KYoann

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

Posté il y a 1 mois
Avatar de KYoann
KYoann

Personne les utilises sur le forum ?

Posté il y a 1 mois
Avatar de CinquièmeDimension
CinquièmeDimension

Désolé KYoann,

Moi je suis une bille. J'ai jamais utilisé. Il faudrait que je m'y mette aussi. :)

Posté il y a 1 mois
Avatar de KYoann
KYoann

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.

Posté il y a 1 mois
Avatar de ChristineZedday
ChristineZedday

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!

Avatar de ChristineZedday
ChristineZedday

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.

Avatar de F.M.
F.M.

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).

Vous ne pouvez pas répondre à ce sujet.