|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
![]() ![]() Julien PauliArchitecte de système d'information Inscription : mai 2006 Messages : 604 ![]() |
Nous avons déjà compris le fonctionnement de PHPUnit et le principe des tests en développement PHP, au travers de l'article Développement piloté par les tests avec PHPUnit.
Nous allons à présent montrer les fonctionnalités avancées de PHPUnit notamment concernant les patterns de tests, Mock, Stub, Double, Spy ; nous verrons comment les mettre en place au travers d'un exemple simple et concret, et en quoi ces techniques peuvent rapidement devenir addictives. Pour cela, il conviendra de rappeler les grands principes du développement logiciel orienté objet : SOLID. Nous parlerons ensuite d'autres fonctionnalités PHPUnit propres au contexte des tests : sauvegarde des variables globales, sauvegarde du contexte statique, isolation des tests dans des processus distincts... Article PHPUnit Avancé et patterns de tests |
|
10
|
|
|
#2 |
|
Membre Expert
![]() Inscription : janvier 2007 Messages : 1 452 ![]() |
super merci de l'article.
|
|
|
00
|
|
|
#3 |
|
Membre régulier
![]() Inscription : avril 2009 Messages : 60 ![]() |
Merci pour cet article très intéressant et surtout très pro!
|
|
|
00
|
|
|
#4 | ||||
![]() ![]() Inscription : avril 2007 Messages : 168 ![]() |
Merci Julien pour cet article très intéressant. Nous l'avons utilisé comme support pour apprendre SOLID lors de l'un de nos dojos à Grenoble (CARA coding dojo). Nous avons utilisé aussi les principes avancés de Régis Médina.
Quelques points de ton article ont toutefois suscité des débats ! Par exemple la présentation de "Interface Segregation" dans l'article "Faites en sorte que vos objets ne se parlent pas directement, mais que chacun parle à une interface de l'autre" ne correspond pas bien à celle de Régis Médina "Les clients ne doivent pas être forcés de dépendre d'interfaces qu'ils n'utilisent pas." L'exemple de l'article correspondrait plus à de l'inversion de dépendances (DIP), plutôt qu'à de la ségrégation d'interface. Ensuite le D de SOLID correspond d'habitude plutôt à inversion de dépendances (DIP), plutôt qu'à l'injection de dépendances, non ? L'injection de dépendances est un outil (parmi d'autres) qui permet de respecter le principe de l'inversion de dépendances. Plus au niveau du code, ton entité SessionStockage a nous a posé problème, car elle nous a paru avoir au moins deux responsabilités, à savoir le stockage, et le calcul du montant total du panier. Est-ce qu'il y avait une bonne raison de faire comme cela ? Cela nous semble violer le principe de responsabilité unique que justement tu invoques, et continue de maintenir une confusion entre les responsabilités de SessionStockage et Panier (et peut-être il y a une responsabilité non identifiée de Facturation). Ce rôle un peu flou de SessionStockage apparaît aussi dans MockStockage, avec la duplication du code déjà présent dans SessionStockage, à savoir Code :
$this->stock[$nom] += abs((float)$prix); Code :
Enfin il nous est venu une question sur la classe Panier Code :
Voilà les questions qui nous ont préoccupés ! Merci encore pour cet excellent sujet de discussion qui nous a bien occupés pendant 2H. Bruno |
||||
|
|
00
|
|
|
#5 |
|
Membre confirmé
![]() ![]() Inscription : janvier 2009 Messages : 120 ![]() |
Très très intéressant, et j'apprécie que ce soit en PHP !
Merci
__________________
++ Foucha. ========= "du code propre c'est du code qui fait exactement ce qu'on croit que ça fait" Mes Articles DVP |
|
00
|
|
|
#6 |
![]() ![]() Julien PauliArchitecte de système d'information Inscription : mai 2006 Messages : 604 ![]() |
Oui bon on sait tous ce qu'est la POO => un chemin vers la réflexion infinie.
J'aurai pu mieux faire, j'aurai pu creuser plus, mais je veux éviter (sans mauvais troll) "l'objetitte" de Java : une classe String ... L'article doit rester clair et faire passer un feeling objet au lecteur. Évidemment, chaque projet nécessite une réflexion personnalisée |
|
00
|
|
|
#7 |
![]() ![]() Inscription : avril 2007 Messages : 168 ![]() |
Oui, c'est sûr que ces principes peuvent être poussés très loin, au détriment de la clarté.
C'est juste qu'on se demandait si tu avais des raisons impérieuses pour aboutir au code proposé, vu qu'aucun de nous ne connaissait PHP... Bruno |
|
|
00
|
|
|
#8 |
|
Membre éprouvé
![]() Inscription : septembre 2006 Messages : 466 ![]() |
Ton article est très intéressant et c'est pour cela qu'on l'a utilisé pour notre coding dojo. En retour, on voulait te faire des propositions si cela pouvait t'aider à l'améliorer.
Bruno a souligné plusieurs points qu'on n'a pas forcément compris : soit par manque de connaissances PHP, soit pour des choix de conception qu'on ne comprenait pas toujours (sans forcément parler de pinaillage à l'infini). L'objectif n'étant pas de pointer d'éventuels points faibles mais plutôt de mieux comprendre pour s'améliorer. Rémy |
|
|
00
|
|
|
#9 | ||
|
Membre expérimenté
![]() ![]() Inscription : mars 2005 Messages : 649 ![]() |
J'étais en train de lire les articles quand j'ai remarqué qu'il semblait y avoir une erreur.
En effet, je ressors d'une conférence sur PHPUnit (mais pas celle donnée par Sebastian, malheureusement), et en comparant les exemples du tutoriel avec le contenu de la conférence, ainsi qu'avec la documentation en ligne sur phpunit.de, j'ai remarqué que les paramètre de assertEquals semble être inversé dans le tutoriel. Au niveau du fonctionnement, ca ne semble rien briser, mais je crois qu'au niveau des utilisations avancé, et de l'optimisation, ou sinon tout simplement pour respecter les normes en vigueur, il peut être bien de préserver l'ordre règlementaire: Code :
http://www.phpunit.de/manual/current...r-phpunit.html Ceci étant dit, je n'ai pas encore terminé ma lecture, et jusqu'à maintenant, ca me semble être une ressource extrèment intéressante ! Toute mes félicitation à l'auteur ! |
||
|
|
00
|
|
|
#10 |
![]() ![]() Julien PauliArchitecte de système d'information Inscription : mai 2006 Messages : 604 ![]() |
Merci pour ces corrections.
Pour les choix architecturaux, ce sont 10 ans d'expérience qui parlent (bon OK, 6ans en ce qui concerne PHP5), donc ça ne se justifie pas tellement... Et puis il y a la clarté de l'article et son accessibilité à prendre en compte, ce n'est qu'un exemple pour un article dvp et en aucun cas une situation réelle
|
|
00
|
Copyright © 2000-2013 - www.developpez.com