Skip to content

Instantly share code, notes, and snippets.

@ludofleury
Created August 21, 2012 14:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ludofleury/3416015 to your computer and use it in GitHub Desktop.
Save ludofleury/3416015 to your computer and use it in GitHub Desktop.
[15:46] == Ludof [513967f0@gateway/web/freenode/ip.81.57.103.240] has joined ##atoum
[15:46] -ChanServ- [##atoum] Welcome on channel of atoum, the simple, modern and intuitive unit test framework for PHP 5.3+ !
[15:46] <Ludof> Hello les gens
[15:46] <Ludof> si y'a du atoum boyz dans la salle, j'voudrais rapidement comprendre le coup du if(),and(),then() sur atoum, c'est le truc que j'ai pas suivi.
[15:46] == jubianchi[work] [~ABC-OBJEC@92.103.14.114] has quit [Read error: No route to host]
[15:47] <Ludof> genre typiquement: https://github.com/mageekguy/atoum/pull/108/files
[15:47] == jubianchi[work] [~ABC-OBJEC@92.103.14.114] has joined ##atoum
[16:07] <steph_py> Yop Ludof
[16:07] <steph_py> J'ai pas trop touché à cette fonctionnalité
[16:07] <steph_py> mais visiblement ça permet d'initialiser le contexte
[16:08] <steph_py> ou peut-être qu'il y a une autre utilité, mais à part peut-être la lisibilité, jsais pas
[16:08] <Ludof> pour moi c'est des précondition d'environnement, mais je suis pas certain.
[16:10] <steph_py> Ouaip, je pense aussi
[16:10] <mageekguy> c'est juste une convention d'écriture
[16:11] <mageekguy> de la décoration
[16:11] <mageekguy> if() et autres ne font strictement rien
[16:11] <mageekguy> c'est juste une façon d'ajouter de la sémantique aux tests
[16:11] <mageekguy> de la même façon que behat
[16:12] <Ludof> oh...
[16:12] <Ludof> j'ai du mal à voir l'intêret à par rendre le test un peu plus verbeux (certes peut être plus sémantique).
[16:12] <Ludof> j'essayerai de tester
[16:12] <mageekguy> tout le monde voit midi à sa porte
[16:13] <mageekguy> ce n'est pas du tout obligatoire d'écrire ses tests de cette façon
[16:13] <mageekguy> c'est juste une façon parmi d'autre
[16:13] <Ludof> ok, je vois mieux.
[16:13] <mageekguy> il y a pour l'instant une exception au fait que ces "mots-clefs" soient juste de la décoration, c'est "assert"
[16:13] <Ludof> donc si j'ai bien compris, tu écris tes "pré-condition" de test sous cette forme
[16:13] <Ludof> et tu test la sortie
[16:14] <Ludof> ok, ça ajoute la semantique
[16:14] <mageekguy> si j'ai ça et ça et encore ça, alors je dois obtenir ceci, ceci et encore cela
[16:14] == CedCannes [~cedric@can06-1-82-242-221-217.fbx.proxad.net] has quit [Quit: Leaving.]
[16:14] <mageekguy> de mon point de vue, ça rend les tests plus lisibles, surtout lorsqu'on y revient longtemps après les avoir écrits
[16:15] <mageekguy> en tant que développpeur, on est tous habitué à ces structures
[16:15] <mageekguy> donc c'est cablé en quelque sorte dans notre cerveau, donc on lit et comprend plus vite
[16:15] <mageekguy> (en tout cas je marche comme ça)
[16:15] <mageekguy> et comme en plus la syntaxe behat est à la mode, ça ne coûte pas grand chose de s'en inspirer
[16:15] <Ludof> ouais, je vois l'intêret là, parce que c'est vrai qu'autant les assertions sont très jolies / lisible dans atoum.
[16:16] <Ludof> autant les préconditions c'est de la soupe.
[16:16] <Ludof> donc, ok, je capte mieux.
[16:16] <mageekguy> après tu peux parfaitement te passer de tout ça
[16:16] <mageekguy> si tu n'aimes pas
[16:16] <mageekguy> encore une fois, atoum essaye de ne rien imposer
[16:16] <Ludof> bah, faut voir, une convention on aime "jamais" au début quand c'est celle des autres.
[16:16] <mageekguy> d'ou la célébre formule qui fait tant rire usul, atoum, c'est comme le PMU, on joue comme on aime
[16:16] <Ludof> :D
[16:17] <Ludof> mais mes tests sont assez clean côté assertions, et assez "bordélique" côté pré-condition
[16:17] <mageekguy> donc je reprend, il y a une exception au simple "decorator", c'est assert
[16:17] <mageekguy> ->assert réinitialise les controlleurs de mock
[16:17] <Ludof> sauf qu'on s'en sert plus
[16:17] <Ludof> ah.
[16:17] <mageekguy> si
[16:17] <Ludof> bon à savoir ça.
[16:17] <mageekguy> c'est juste que dans la grande majorité des tests de atoum, ça sert pas
[16:17] <Ludof> mais techniquement, si je fais $this->string
[16:17] <mageekguy> donc on les dégage
[16:18] <mageekguy> si tu fais :
[16:18] <Ludof> c'est comme $this->assert->string() ?
[16:19] <mageekguy> $this->if($aMock = new \mock\...)->and...-> then->object($somethingWhichUseAMock->doSomething())->mock($aMock)->call('...')->once()->assert-> <= à ce moment, le controlleur de $aMock est réinitialisé
[16:20] <mageekguy> et donc le nombre d'appel qu'il a mémorisé lors de l'assertion précédente est remis à 0
[16:20] <Ludof> ok, c'est uniquement le controlleur de mock
[16:20] <mageekguy> de tous les mocks
[16:20] <mageekguy> et des adapter, également
[16:20] == startupz [~startupz@LPuteaux-156-16-39-176.w82-127.abo.wanadoo.fr] has joined ##atoum
[16:20] <Ludof> (ouais les adapters j'ai pas suivi non plus)
[16:20] <mageekguy> tu peux aussi faire ->assert('Now we test the fucking case where all is shit")->
[16:21] <Ludof> ok... je vois mieux la syntaxe
[16:21] <mageekguy> dans ce cas, 'Now we test the fucking case where all is shit" sera repris dans les messages de failure
[16:21] <Ludof> ouais parfait
[16:21] <mageekguy> mais encore une fois, le "titre" est facultatif
[16:21] <Ludof> quand tu dis
[16:22] <mageekguy> ça te permet de décrire tes différents tests au fil de l'eau de manière explicite et j'espère élégante
[16:22] <Ludof> le controleur de mock est reset, les closures injectées sont effacées ?
[16:22] <mageekguy> nop
[16:22] <mageekguy> juste le stockage des appels
[16:22] <Ludof> ok, donc assert c'est ton "scenario"
[16:22] <Ludof> if if, and and, then
[16:22] <Ludof> je capte.
[16:22] <Ludof> c'est super ça.
[16:22] <mageekguy> ça veut dire que si tu fais ->assert->mock($aMock)->call('method')->once(), ça failera forcément
[16:23] <Ludof> question rapide si tu as encore le temps
[16:23] <Ludof> les adapters ?
[16:23] <mageekguy> parce que le controlleur du mock n'aura aucun appel en mémoire
[16:23] <Ludof> what is this ?
[16:23] <mageekguy> les adapter, c'est des mocks pour les fonctions
[16:23] <Ludof> ok
[16:23] <mageekguy> d'ailleurs, le controlleur de mock hérite de l'adapter de test
[16:23] <mageekguy> même principe
[16:24] <mageekguy> du coup, tu peux faire $adapter->file_get_contents = false
[16:24] <mageekguy> et tu pourras tester ton code quand file_get_contents te retourne false
[16:24] <mageekguy> évidemment, il faut que tu ai un adapter d'injecté dans l'objet que tu tests
[16:24] <mageekguy> c'est pas parfait
[16:24] <Ludof> mmh ok, ca reste encore trouble pour moi
[16:24] <Ludof> mais en gros c'est un mocks
[16:24] <mageekguy> parce que certaines fonctions de php demande obligatoirement des références
[16:25] <mageekguy> et il faut une syntaxe particulière
[16:25] <mageekguy> ça permet de tester le comportement du code lorsqu'il utilise une fonction comme proc_open, par exemple
[16:25] <mageekguy> regarde tests/units/classes//test/engines/concurrent.php par exemple
[16:25] <mageekguy> c'est l'exemple parfait, je pense
[16:25] <Ludof> ok merci
[16:26] <mageekguy> parce que tu dois avoir tout les cas de figure
[16:26] <mageekguy> adapter = proxy pour les fonctions
[16:26] <mageekguy> et tu as aussi les mocks de stream
[16:26] <Ludof> oh, pour les fonctions natives php
[16:26] <jubianchi[work]> ludof: j'utilise beaucoup les adapteurs pour "simuler" la présence ou l'absence d'extension php par exemple
[16:26] <mageekguy> c'est sympa parce que ça permet de mocker entre autre les flux reseaux ou le file system
[16:26] <Ludof> ... ok y me manquait l'aspect "fonctions natives"
[16:26] <Ludof> wow c'est fou ça
[16:27] <Ludof> comment ça marche oO ?
[16:27] <mageekguy> c'est encore un peu "frustre", mais ça marche
[16:27] <Ludof> comment tu overrides ?
[16:27] <mageekguy> ça marche via un stream_wrapper
[16:27] <mageekguy> atoum://
[16:27] <Ludof> wow...
[16:27] <mageekguy> et après tu peux définir le comportement de ton stream
[16:27] <Ludof> ok jamais touché à ça. ça a l'air puissant.
[16:27] <Ludof> (dangereux aussi)
[16:28] <Ludof> ok merci pour la mise à jour rapide, ca me suffit pour avancer, j'vais tester tout ça
[16:28] <mageekguy> regarde ./tests/units/classes/scripts/builder/vcs/svn.php pour un exemple d'utilisation des streams
[16:28] <mageekguy> c'est pas encore finalisé à 100%, il y a moyen d'améliorer l'API
[16:28] <Ludof> je me gist ce log irc avec tous les liens :)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment