<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>
<channel>
	<title>Commentaires sur : Maîtriser les tests unitaires dans Ruby on Rails</title>
	<atom:link href="http://blog.olivier-elmekki.com/2008/10/17/maitriser-les-tests-unitaires-dans-ruby-on-rails/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.olivier-elmekki.com/2008/10/17/maitriser-les-tests-unitaires-dans-ruby-on-rails/</link>
	<description></description>
	<pubDate>Thu, 09 Sep 2010 05:36:02 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.5</generator>
		<item>
		<title>Par : Patfrat</title>
		<link>http://blog.olivier-elmekki.com/2008/10/17/maitriser-les-tests-unitaires-dans-ruby-on-rails/#comment-4254</link>
		<dc:creator>Patfrat</dc:creator>
		<pubDate>Thu, 21 Jan 2010 21:44:07 +0000</pubDate>
		<guid isPermaLink="false">http://blog.olivier-elmekki.com/?p=220#comment-4254</guid>
		<description>Oui, d'ailleurs, je mange là : http://blog.olivier-elmekki.com/2010/01/21/le-developpement-top-down-en-uad/
Je mange ...
Merci ! Je te ferai des commentaires une fois que j'aurai fini la salade ;)</description>
		<content:encoded><![CDATA[<p>Oui, d&#8217;ailleurs, je mange là : <a href="http://blog.olivier-elmekki.com/2010/01/21/le-developpement-top-down-en-uad/" rel="nofollow">http://blog.olivier-elmekki.com/2010/01/21/le-developpement-top-down-en-uad/</a><br />
Je mange &#8230;<br />
Merci ! Je te ferai des commentaires une fois que j&#8217;aurai fini la salade ;)</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : kik</title>
		<link>http://blog.olivier-elmekki.com/2008/10/17/maitriser-les-tests-unitaires-dans-ruby-on-rails/#comment-4253</link>
		<dc:creator>kik</dc:creator>
		<pubDate>Thu, 21 Jan 2010 21:41:46 +0000</pubDate>
		<guid isPermaLink="false">http://blog.olivier-elmekki.com/?p=220#comment-4253</guid>
		<description>"Je commence à entrevoir la puissance du concombre ;)
"

Oh que oui, on en deviendrait végétarien :]</description>
		<content:encoded><![CDATA[<p>&#8220;Je commence à entrevoir la puissance du concombre ;)<br />
&#8221;</p>
<p>Oh que oui, on en deviendrait végétarien :]</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : kik</title>
		<link>http://blog.olivier-elmekki.com/2008/10/17/maitriser-les-tests-unitaires-dans-ruby-on-rails/#comment-4252</link>
		<dc:creator>kik</dc:creator>
		<pubDate>Thu, 21 Jan 2010 21:40:23 +0000</pubDate>
		<guid isPermaLink="false">http://blog.olivier-elmekki.com/?p=220#comment-4252</guid>
		<description>hop, c'est fait : http://blog.olivier-elmekki.com/2010/01/21/le-developpement-top-down-en-uad/</description>
		<content:encoded><![CDATA[<p>hop, c&#8217;est fait : <a href="http://blog.olivier-elmekki.com/2010/01/21/le-developpement-top-down-en-uad/" rel="nofollow">http://blog.olivier-elmekki.com/2010/01/21/le-developpement-top-down-en-uad/</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Patfrat</title>
		<link>http://blog.olivier-elmekki.com/2008/10/17/maitriser-les-tests-unitaires-dans-ruby-on-rails/#comment-4251</link>
		<dc:creator>Patfrat</dc:creator>
		<pubDate>Thu, 21 Jan 2010 20:46:02 +0000</pubDate>
		<guid isPermaLink="false">http://blog.olivier-elmekki.com/?p=220#comment-4251</guid>
		<description>Ha ben, en attendant avec impatience ton article, je suis en train de suivre celui-ci : http://asciicasts.com/episodes/155-beginning-with-cucumber

Je commence à entrevoir la puissance du concombre ;)</description>
		<content:encoded><![CDATA[<p>Ha ben, en attendant avec impatience ton article, je suis en train de suivre celui-ci : <a href="http://asciicasts.com/episodes/155-beginning-with-cucumber" rel="nofollow">http://asciicasts.com/episodes/155-beginning-with-cucumber</a></p>
<p>Je commence à entrevoir la puissance du concombre ;)</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Patfrat</title>
		<link>http://blog.olivier-elmekki.com/2008/10/17/maitriser-les-tests-unitaires-dans-ruby-on-rails/#comment-4250</link>
		<dc:creator>Patfrat</dc:creator>
		<pubDate>Thu, 21 Jan 2010 19:17:26 +0000</pubDate>
		<guid isPermaLink="false">http://blog.olivier-elmekki.com/?p=220#comment-4250</guid>
		<description>Super, merci !</description>
		<content:encoded><![CDATA[<p>Super, merci !</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : kik</title>
		<link>http://blog.olivier-elmekki.com/2008/10/17/maitriser-les-tests-unitaires-dans-ruby-on-rails/#comment-4249</link>
		<dc:creator>kik</dc:creator>
		<pubDate>Thu, 21 Jan 2010 18:08:05 +0000</pubDate>
		<guid isPermaLink="false">http://blog.olivier-elmekki.com/?p=220#comment-4249</guid>
		<description>Oui, effectivement :) Peut-être qu'un exemple serait plus simple. Je m'apprêtais à l'écrire ici, mais je vais plutôt en faire un post, à cause de la longueur et du formatage.

Je te post ça dès que j'ai fini.</description>
		<content:encoded><![CDATA[<p>Oui, effectivement :) Peut-être qu&#8217;un exemple serait plus simple. Je m&#8217;apprêtais à l&#8217;écrire ici, mais je vais plutôt en faire un post, à cause de la longueur et du formatage.</p>
<p>Je te post ça dès que j&#8217;ai fini.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Patfrat</title>
		<link>http://blog.olivier-elmekki.com/2008/10/17/maitriser-les-tests-unitaires-dans-ruby-on-rails/#comment-4247</link>
		<dc:creator>Patfrat</dc:creator>
		<pubDate>Thu, 21 Jan 2010 17:14:26 +0000</pubDate>
		<guid isPermaLink="false">http://blog.olivier-elmekki.com/?p=220#comment-4247</guid>
		<description>Intéressante notre discussion, et je la continue ici pour ceux qui tomberont sur tes articles ... ça peu aider.

Pour continuer donc :

Les Users Stories, les scenarii en fait qui composent ton application, t'aident à savoir de quelles méthodes (actions) et de quelles variables tu vas avoir besoin dans tes classes...

Mais est-ce que cela peut également t'aider à savoir de quelles classes tu vas avoir besoin finalement ?
Je suppose que oui !</description>
		<content:encoded><![CDATA[<p>Intéressante notre discussion, et je la continue ici pour ceux qui tomberont sur tes articles &#8230; ça peu aider.</p>
<p>Pour continuer donc :</p>
<p>Les Users Stories, les scenarii en fait qui composent ton application, t&#8217;aident à savoir de quelles méthodes (actions) et de quelles variables tu vas avoir besoin dans tes classes&#8230;</p>
<p>Mais est-ce que cela peut également t&#8217;aider à savoir de quelles classes tu vas avoir besoin finalement ?<br />
Je suppose que oui !</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : kik</title>
		<link>http://blog.olivier-elmekki.com/2008/10/17/maitriser-les-tests-unitaires-dans-ruby-on-rails/#comment-4246</link>
		<dc:creator>kik</dc:creator>
		<pubDate>Thu, 21 Jan 2010 16:53:46 +0000</pubDate>
		<guid isPermaLink="false">http://blog.olivier-elmekki.com/?p=220#comment-4246</guid>
		<description>Oui, c'est surement ce qu'il y a de plus dur à se représenter :) En fait, il y a plusieurs écoles sur ce point, je ne répond que pour moi.

Déjà, ce qui met tout le monde d'accord est ce qu'il ne faut *pas* tester : il ne faut pas tester du code qui n'est pas écrit par toi. Donc, on ne test pas qu'un controller appelle la bonne méthode, on ne test pas qu'une association fonctionne bien, etc. C'est aux tests du core de rails de s'occuper de ça.

Ensuite, il devient plus clair de savoir quoi tester à partir du moment où tu écris tes tests avant d'écrire ton code. Décrit simplement dans ton test ce que tu veux que ton code fasse. Si par exemple tu as une méthode de modèle appelée fullname qui doit rassembler les entrées firstname et lastname en ajoutant un préfix de titre au début qui sera passé en argument (ex: "Monseigneur Jean Dupont", désolé pour l'exemple :P ), tu écriras un test avant d'écrire cette méthode qui dira que ton modèle, lorsqu'on appelle cette méthode, doit recevoir l'argument "Monseigneur", doit appeler "firstname" et "lastname" et doit répondre "Monseigneur Jean Dupont".

Les partisans du full test coverage te diront aussi que tu dois écrire un test qui vérifie qu'il n'est pas possible d'appeler la méthode sans arguments, qu'une erreur doit être générée si l'instance du modèle n'a pas d'attribut firstname défini, etc.

Pour ma part, je trouve plus naturel de développer "à l'envers". Plutôt que de penser le schémas de ma base de donnée en essayant de me représenter tout ce dont j'ai besoin, puis faire des tests de modèles en poussant ma réflexion pour deviner quelle méthodes il doivent avoir, et donc quels tests faire, je procède ainsi :

1°) je fais valider mes users stories d'une fonctionnalité. Chaque scénario test une action précise.

2°) je prend le scénario d'une action, et j'écris la vue qui y correspond. Le scénario cucumber étant son test, je sais précisément ce que doit être ma vue.

3°) Ayant écrit la vue, je sais quels variables doivent y être assignées. Je peux donc écrire mon test de controller pour cette action et je test que tout est assigné comme il le faut.

4°) Sachant précisément ce qui doit être assigné, je peux écrire l'action de mon controller. Comme dans le cas de la vue, le simple fait de l'écrire me fait savoir ce dont on besoin mes modèles.

5°) Je peux donc maintenant écrire les tests de mes modèles. Je sais de quel modèle j'ai besoin, quelles méthodes ils doivent avoir avec quels paramètres et quelle valeur de retour.

6°) j'écris ces modèles. Je sais désormais quel schémas de db je dois avoir à ce moment.

7°) je recommence à 2°) jusqu'à ce que j'ai épuisé mes scénarii et que tous les tests passent. Puis j'écris l'user story d'une autre fonctionnalité.

Cette méthodologie me permet de savoir précisément quoi tester. Maintenant, comme je te disais, elle est très personnelle :)

Si je devais me risquer à formuler une règle universelle sur quoi tester, je dirais que tu dois tester le comportement de tes classes, en écrivant ce que tu te représente au moment où tu la conçois. Ma classe doit avoir telle méthode qui retourne ceci en faisant cela. Test que ceci est retourné, et que cela a été appelé.</description>
		<content:encoded><![CDATA[<p>Oui, c&#8217;est surement ce qu&#8217;il y a de plus dur à se représenter :) En fait, il y a plusieurs écoles sur ce point, je ne répond que pour moi.</p>
<p>Déjà, ce qui met tout le monde d&#8217;accord est ce qu&#8217;il ne faut *pas* tester : il ne faut pas tester du code qui n&#8217;est pas écrit par toi. Donc, on ne test pas qu&#8217;un controller appelle la bonne méthode, on ne test pas qu&#8217;une association fonctionne bien, etc. C&#8217;est aux tests du core de rails de s&#8217;occuper de ça.</p>
<p>Ensuite, il devient plus clair de savoir quoi tester à partir du moment où tu écris tes tests avant d&#8217;écrire ton code. Décrit simplement dans ton test ce que tu veux que ton code fasse. Si par exemple tu as une méthode de modèle appelée fullname qui doit rassembler les entrées firstname et lastname en ajoutant un préfix de titre au début qui sera passé en argument (ex: &#8220;Monseigneur Jean Dupont&#8221;, désolé pour l&#8217;exemple :P ), tu écriras un test avant d&#8217;écrire cette méthode qui dira que ton modèle, lorsqu&#8217;on appelle cette méthode, doit recevoir l&#8217;argument &#8220;Monseigneur&#8221;, doit appeler &#8220;firstname&#8221; et &#8220;lastname&#8221; et doit répondre &#8220;Monseigneur Jean Dupont&#8221;.</p>
<p>Les partisans du full test coverage te diront aussi que tu dois écrire un test qui vérifie qu&#8217;il n&#8217;est pas possible d&#8217;appeler la méthode sans arguments, qu&#8217;une erreur doit être générée si l&#8217;instance du modèle n&#8217;a pas d&#8217;attribut firstname défini, etc.</p>
<p>Pour ma part, je trouve plus naturel de développer &#8220;à l&#8217;envers&#8221;. Plutôt que de penser le schémas de ma base de donnée en essayant de me représenter tout ce dont j&#8217;ai besoin, puis faire des tests de modèles en poussant ma réflexion pour deviner quelle méthodes il doivent avoir, et donc quels tests faire, je procède ainsi :</p>
<p>1°) je fais valider mes users stories d&#8217;une fonctionnalité. Chaque scénario test une action précise.</p>
<p>2°) je prend le scénario d&#8217;une action, et j&#8217;écris la vue qui y correspond. Le scénario cucumber étant son test, je sais précisément ce que doit être ma vue.</p>
<p>3°) Ayant écrit la vue, je sais quels variables doivent y être assignées. Je peux donc écrire mon test de controller pour cette action et je test que tout est assigné comme il le faut.</p>
<p>4°) Sachant précisément ce qui doit être assigné, je peux écrire l&#8217;action de mon controller. Comme dans le cas de la vue, le simple fait de l&#8217;écrire me fait savoir ce dont on besoin mes modèles.</p>
<p>5°) Je peux donc maintenant écrire les tests de mes modèles. Je sais de quel modèle j&#8217;ai besoin, quelles méthodes ils doivent avoir avec quels paramètres et quelle valeur de retour.</p>
<p>6°) j&#8217;écris ces modèles. Je sais désormais quel schémas de db je dois avoir à ce moment.</p>
<p>7°) je recommence à 2°) jusqu&#8217;à ce que j&#8217;ai épuisé mes scénarii et que tous les tests passent. Puis j&#8217;écris l&#8217;user story d&#8217;une autre fonctionnalité.</p>
<p>Cette méthodologie me permet de savoir précisément quoi tester. Maintenant, comme je te disais, elle est très personnelle :)</p>
<p>Si je devais me risquer à formuler une règle universelle sur quoi tester, je dirais que tu dois tester le comportement de tes classes, en écrivant ce que tu te représente au moment où tu la conçois. Ma classe doit avoir telle méthode qui retourne ceci en faisant cela. Test que ceci est retourné, et que cela a été appelé.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Patfrat</title>
		<link>http://blog.olivier-elmekki.com/2008/10/17/maitriser-les-tests-unitaires-dans-ruby-on-rails/#comment-4245</link>
		<dc:creator>Patfrat</dc:creator>
		<pubDate>Thu, 21 Jan 2010 16:27:56 +0000</pubDate>
		<guid isPermaLink="false">http://blog.olivier-elmekki.com/?p=220#comment-4245</guid>
		<description>Ok pour RSpec et Cucumber, j'ai deux sites à faire en RoR et je vais essayer des les faire avec les bonnes pratiques TTD avant de m'attaquer à l'UADD :D
Allons-y par étape. C'est une gymnastique intellectuelle intéressante mais il faut bien se l'approprier.
Par contre, petite question, j'ai l'impression que c'est un peu comme une équation de maths à resoudre par une astuce ... comment savoir quels tests faire ? Par quoi commencer finalement ? Quels tests sont judicieux et quels tests sont inutiles ... là, je me perds un peu.</description>
		<content:encoded><![CDATA[<p>Ok pour RSpec et Cucumber, j&#8217;ai deux sites à faire en RoR et je vais essayer des les faire avec les bonnes pratiques TTD avant de m&#8217;attaquer à l&#8217;UADD :D<br />
Allons-y par étape. C&#8217;est une gymnastique intellectuelle intéressante mais il faut bien se l&#8217;approprier.<br />
Par contre, petite question, j&#8217;ai l&#8217;impression que c&#8217;est un peu comme une équation de maths à resoudre par une astuce &#8230; comment savoir quels tests faire ? Par quoi commencer finalement ? Quels tests sont judicieux et quels tests sont inutiles &#8230; là, je me perds un peu.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : kik</title>
		<link>http://blog.olivier-elmekki.com/2008/10/17/maitriser-les-tests-unitaires-dans-ruby-on-rails/#comment-4244</link>
		<dc:creator>kik</dc:creator>
		<pubDate>Thu, 21 Jan 2010 16:21:21 +0000</pubDate>
		<guid isPermaLink="false">http://blog.olivier-elmekki.com/?p=220#comment-4244</guid>
		<description>De rien, merci à toi pour ton retour :)

Cucumber est le story runner de RSpec (bien qu'il puisse être utilisé sans). En gros, dans le tercet unit/functional/integration, il s'occupe des test d'intégration. Il risque donc de ne pas te suffire :)

Il a cependant un avantage énorme sur les autres : il peut être utilisé hors-ruby. Je m'en sers personnellement, couplé avec phpspec, pour tester mes sites php.

Enfin, cucumber va un peu plus loin que du TDD : son auteur le qualifie d'outil de "user acceptance driven development". Je test ça en conditions réelles dans mes contrats, ca marche pas mal. Tu écris des user stories, tu les fais valider par tes clients et ça devient des tests. Ça change radicalement la façon de développer, même quand on s'est fait au TDD :)</description>
		<content:encoded><![CDATA[<p>De rien, merci à toi pour ton retour :)</p>
<p>Cucumber est le story runner de RSpec (bien qu&#8217;il puisse être utilisé sans). En gros, dans le tercet unit/functional/integration, il s&#8217;occupe des test d&#8217;intégration. Il risque donc de ne pas te suffire :)</p>
<p>Il a cependant un avantage énorme sur les autres : il peut être utilisé hors-ruby. Je m&#8217;en sers personnellement, couplé avec phpspec, pour tester mes sites php.</p>
<p>Enfin, cucumber va un peu plus loin que du TDD : son auteur le qualifie d&#8217;outil de &#8220;user acceptance driven development&#8221;. Je test ça en conditions réelles dans mes contrats, ca marche pas mal. Tu écris des user stories, tu les fais valider par tes clients et ça devient des tests. Ça change radicalement la façon de développer, même quand on s&#8217;est fait au TDD :)</p>
]]></content:encoded>
	</item>
</channel>
</rss>
