cakephp2-php8/vendors/simpletest/docs/fr/overview.html

295 lines
20 KiB
HTML
Raw Normal View History

<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>
Aper&ccedil;u et liste des fonctionnalit&eacute;s des testeurs unitaires PHP et web de SimpleTest PHP
</title>
<link rel="stylesheet" type="text/css" href="docs.css" title="Styles">
</head>
<body>
<div class="menu_back">
<div class="menu">
<h2>
<a href="index.html">SimpleTest</a>
</h2>
<ul>
<li>
<a href="overview.html">Overview</a>
</li>
<li>
<a href="unit_test_documentation.html">Unit tester</a>
</li>
<li>
<a href="group_test_documentation.html">Group tests</a>
</li>
<li>
<a href="server_stubs_documentation.html">Server stubs</a>
</li>
<li>
<a href="mock_objects_documentation.html">Mock objects</a>
</li>
<li>
<a href="partial_mocks_documentation.html">Partial mocks</a>
</li>
<li>
<a href="reporter_documentation.html">Reporting</a>
</li>
<li>
<a href="expectation_documentation.html">Expectations</a>
</li>
<li>
<a href="web_tester_documentation.html">Web tester</a>
</li>
<li>
<a href="form_testing_documentation.html">Testing forms</a>
</li>
<li>
<a href="authentication_documentation.html">Authentication</a>
</li>
<li>
<a href="browser_documentation.html">Scriptable browser</a>
</li>
</ul>
</div>
</div>
<h1>Apercu de SimpleTest</h1>
<div class="content">
<p>
<a class="target" name="resume">
<h2>Qu'est-ce que SimpleTest ?</h2>
</a>
</p>
<p>
Le coeur de SimpleTest est un framework de test construit autour de classes de sc&eacute;narios de test. Celles-ci sont &eacute;crites comme des extensions des classes premi&egrave;res de sc&eacute;narios de test, chacune &eacute;largie avec des m&eacute;thodes qui contiennent le code de test effectif. Les scripts de test de haut niveau invoque la m&eacute;thode <span class="new_code">run()</span> &agrave; chaque sc&eacute;nario de test successivement. Chaque m&eacute;thode de test est &eacute;crite pour appeler des assertions diverses que le d&eacute;veloppeur suppose &ecirc;tre vraies, <span class="new_code">assertEqual()</span> par exemple. Si l'assertion est correcte, alors un succ&egrave;s est exp&eacute;di&eacute; au rapporteur observant le test, mais toute erreur d&eacute;clenche une alerte et une description de la dissension.
</p>
<p>
Un <a href="unit_test_documentation.html">sc&eacute;nario de test</a> ressemble &agrave;...
<pre>
class <strong>MyTestCase</strong> extends UnitTestCase {
<strong>
function testLog() {
$log = &amp;new Log('my.log');
$log-&gt;message('Hello');
$this-&gt;assertTrue(file_exists('my.log'));
}</strong>
}
</pre>
</p>
<p>
Ces outils sont con&ccedil;us pour le d&eacute;veloppeur. Les tests sont &eacute;crits en PHP directement, plus ou moins simultan&eacute;ment avec la construction de l'application elle-m&ecirc;me. L'avantage d'utiliser PHP lui-m&ecirc;me comme langage de test est qu'il n'y a pas de nouveau langage &agrave; apprendre, les tests peuvent commencer directement et le d&eacute;veloppeur peut tester n'importe quelle partie du code. Plus simplement, toutes les parties qui peuvent &ecirc;tre acc&eacute;d&eacute;es par le code de l'application peuvent aussi &ecirc;tre acc&eacute;d&eacute;es par le code de test si ils sont tous les deux dans le m&ecirc;me langage.
</p>
<p>
Le type de sc&eacute;nario de test le plus simple est le <span class="new_code">UnitTestCase</span>. Cette classe de sc&eacute;nario de test inclut les tests standards pour l'&eacute;galit&eacute;, les r&eacute;f&eacute;rences et l'appariement de motifs (via les expressions rationnelles). Ceux-ci testent ce que vous seriez en droit d'attendre du r&eacute;sultat d'une fonction ou d'une m&eacute;thode. Il s'agit du type de test le plus commun pendant le quotidien du d&eacute;veloppeur, peut-&ecirc;tre 95% des sc&eacute;narios de test.
</p>
<p>
La t&acirc;che ultime d'une application web n'est cependant pas de produire une sortie correcte &agrave; partir de m&eacute;thodes ou d'objets, mais plut&ocirc;t de produire des pages web. La classe <span class="new_code">WebTestCase</span> teste des pages web. Elle simule un navigateur web demandant une page, de fa&ccedil;on exhaustive : cookies, proxies, connexions s&eacute;curis&eacute;es, authentification, formulaires, cadres et la plupart des &eacute;l&eacute;ments de navigation. Avec ce type de sc&eacute;nario de test, le d&eacute;veloppeur peut garantir que telle ou telle information est pr&eacute;sente dans la page et que les formulaires ainsi que les sessions sont g&eacute;r&eacute;s comme il faut.
</p>
<p>
Un <a href="web_tester_documentation.html">sc&eacute;nario de test web</a> ressemble &agrave;...
<pre>
class <strong>MySiteTest</strong> extends WebTestCase {
<strong>
function testHomePage() {
$this-&gt;get('http://www.my-site.com/index.php');
$this-&gt;assertTitle('My Home Page');
$this-&gt;clickLink('Contact');
$this-&gt;assertTitle('Contact me');
$this-&gt;assertWantedPattern('/Email me at/');
}</strong>
}
</pre>
</p>
<p>
<a class="target" name="fonctionnalites">
<h2>Liste des fonctionnalites</h2>
</a>
</p>
<p>
Ci-dessous vous trouverez un canevas assez brut des fonctionnalit&eacute;s &agrave; aujourd'hui et pour demain, sans oublier leur date approximative de publication. J'ai bien peur qu'il soit modifiable sans pr&eacute;-avis &eacute;tant donn&eacute; que les jalons d&eacute;pendent beaucoup sur le temps disponible. Les trucs en vert ont &eacute;t&eacute; cod&eacute;s, mais pas forc&eacute;ment d&eacute;j&agrave; rendus public. Si vous avez une besoin pressant pour une fonctionnalit&eacute; verte mais pas encore publique alors vous devriez retirer le code directement sur le CVS chez SourceFourge. Une fonctionnalit&eacute;e publi&eacute;e est indiqu&eacute; par "Fini".
<table>
<thead>
<tr>
<th>Fonctionnalit&eacute;</th><th>Description</th><th>Publication</th>
</tr>
</thead>
<tbody>
<tr>
<td>Sc&eacute;nariot de test unitaire</td>
<td>Les classes de test et assertions de base</td>
<td style="color: green;">Fini</td>
</tr>
<tr>
<td>Affichage HTML</td>
<td>L'affichage le plus simple possible</td>
<td style="color: green;">Fini</td>
</tr>
<tr>
<td>Autochargement des sc&eacute;narios de test</td>
<td>Lire un fichier avec des sc&eacute;narios de test et les charger dans un groupe de test automatiquement</td>
<td style="color: green;">Fini</td>
</tr>
<tr>
<td>G&eacute;n&eacute;rateur de code d'objets fantaisie</td>
<td>Des objets capable de simuler d'autres objets, supprimant les d&eacute;pendances dans les tests</td>
<td style="color: green;">Fini</td>
</tr>
<tr>
<td>Bouchons serveur</td>
<td>Des objets fantaisie sans r&eacute;sultat attendu &agrave; utiliser &agrave; l'ext&eacute;rieur des sc&eacute;narios de test, pour le prototypage par exemple.</td>
<td style="color: green;">Fini</td>
</tr>
<tr>
<td>Int&eacute;gration d'autres testeurs unitaires</td>
<td>
La capacit&eacute; de lire et simuler d'autres sc&eacute;narios de test en provenance de PHPUnit et de PEAR::Phpunit.</td>
<td style="color: green;">Fini</td>
</tr>
<tr>
<td>Sc&eacute;nario de test web</td>
<td>Appariement basique de motifs dans une page t&eacute;l&eacute;charg&eacute;e.</td>
<td style="color: green;">Fini</td>
</tr>
<tr>
<td>Analyse de page HTML</td>
<td>Permet de suivre les liens et de trouver la balise de titre</td>
<td style="color: green;">Fini</td>
</tr>
<tr>
<td>Simulacre partiel</td>
<td>Simuler des parties d'une classe pour tester moins qu'une classe ou dans des cas complexes.</td>
<td style="color: green;">Fini</td>
</tr>
<tr>
<td>Gestion des cookies Web</td>
<td>Gestion correcte des cookies au t&eacute;l&eacute;chargement d'une page.</td>
<td style="color: green;">Fini</td>
</tr>
<tr>
<td>Suivi des redirections</td>
<td>Le t&eacute;l&eacute;chargement d'une page suit automatiquement une redirection 300.</td>
<td style="color: green;">Fini</td>
</tr>
<tr>
<td>Analyse d'un formulaire</td>
<td>La capacit&eacute; de valider un formulaire simple et d'en lire les valeurs par d&eacute;faut.</td>
<td style="color: green;">Fini</td>
</tr>
<tr>
<td>Interface en ligne de commande</td>
<td>Affiche le r&eacute;sultat des tests sans navigateur web.</td>
<td style="color: green;">Fini</td>
</tr>
<tr>
<td>Mise &agrave; nu des attentes d'une classe</td>
<td>Peut cr&eacute;er des tests pr&eacute;cis avec des simulacres ainsi que des sc&eacute;narios de test.</td>
<td style="color: green;">Fini</td>
</tr>
<tr>
<td>Sortie et analyse XML</td>
<td>Permet de tester sur plusieurs h&ocirc;tes et d'int&eacute;grer des extensions d'acceptation de test.</td>
<td style="color: green;">Fini</td>
</tr>
<tr>
<td>Sc&eacute;nario de test en ligne de commande</td>
<td>Permet de tester des outils ou scripts en ligne de commande et de manier des fichiers.</td>
<td style="color: green;">Fini</td>
</tr>
<tr>
<td>Compatibilit&eacute; avec PHP Documentor</td>
<td>G&eacute;n&eacute;ration automatique et compl&egrave;te de la documentation au niveau des classes.</td>
<td style="color: green;">Fini</td>
</tr>
<tr>
<td>Interface navigateur</td>
<td>Mise &agrave; nu des niveaux bas de l'interface du navigateur web pour des sc&eacute;narios de test plus pr&eacute;cis.</td>
<td style="color: green;">Fini</td>
</tr>
<tr>
<td>Authentification HTTP</td>
<td>T&eacute;l&eacute;chargement des pages web prot&eacute;g&eacute;es avec une authentification basique seulement.</td>
<td style="color: green;">Fini</td>
</tr>
<tr>
<td>Boutons de navigation d'un navigateur</td>
<td>Arri&egrave;re, avant et recommencer</td>
<td style="color: green;">Fini</td>
</tr>
<tr>
<td>Support de SSL</td>
<td>Peut se connecter &agrave; des pages de type https.</td>
<td style="color: green;">Fini</td>
</tr>
<tr>
<td>Support de proxy</td>
<td>Peut se connecter via des proxys communs</td>
<td style="color: green;">Fini</td>
</tr>
<tr>
<td>Support des cadres</td>
<td>G&egrave;re les cadres dans les sc&eacute;narios de test web.</td>
<td style="color: green;">Fini</td>
</tr>
<tr>
<td>Am&eacute;lioration de l'affichage des tests</td>
<td>Une meilleure interface graphique web, avec un arbre des sc&eacute;narios de test.</td>
<td style="color: red;">1.1</td>
</tr>
<tr>
<td>Localisation</td>
<td>Abstraction des messages et g&eacute;nration du code &agrave; partir de fichiers XML.</td>
<td style="color: red;">1.1</td>
</tr>
<tr>
<td>Simulation d'interface</td>
<td>Peut g&eacute;n&eacute;rer des objets fantaisie tant vers des interfaces que vers des classes.</td>
<td style="color: red;">2.0</td>
</tr>
<tr>
<td>Test sur es exceptions</td>
<td>Dans le m&ecirc;me esprit que sur les tests des erreurs PHP.</td>
<td style="color: red;">2.0</td>
</tr>
<tr>
<td>Rercherche d'&eacute;l&eacute;ments avec XPath</td>
<td>Peut utiliser Tidy HTML pour un appariement plus rapide et plus souple.</td>
<td style="color: red;">2.0</td>
</tr>
<tr>
<td>Test de l'upload de fichier</td>
<td>Peut simuler la balise input de type file</td>
<td style="color: red;">2.0</td>
</tr>
</tbody>
</table>
La migration vers PHP5 commencera juste apr&egrave;s la s&eacute;rie des 1.0, &agrave; partir de l&agrave; PHP4 ne sera plus support&eacute;. SimpleTest est actuellement compatible avec PHP5 mais n'utilisera aucune des nouvelles fonctionnalit&eacute;s avant la version 2.
</p>
<p>
<a class="target" name="ressources">
<h2>Ressources sur le web pour les tests</h2>
</a>
</p>
<p>
Le processus est au moins aussi important que les outils. Le type de proc&eacute;dure que fait un usage le plus intensif des outils de test pour d&eacute;veloppeur est bien s&ucirc;r l'<a href="http://www.extremeprogramming.org/">Extreme Programming</a>. Il s'agit l&agrave; d'une des <a href="http://www.agilealliance.com/articles/index">m&eacute;thodes agiles</a> qui combinent plusieurs pratiques pour "lisser la courbe de co&ucirc;t" du d&eacute;veloppement logiciel. La plus extr&egrave;me reste le <a href="http://www.testdriven.com/modules/news/">d&eacute;veloppement pilot&eacute; par les tests</a>, o&ugrave; vous devez adh&eacute;rer &agrave; la r&egrave;gle du <cite>pas de code avant d'avoir un test</cite>. Si vous &ecirc;tes plut&ocirc;t du genre planninficateur ou que vous estimez que l'exp&eacute;rience compte plus que l'&eacute;volution, vous pr&eacute;f&eacute;rerez peut-&ecirc;tre l'approche <a href="http://www.therationaledge.com/content/dec_01/f_spiritOfTheRUP_pk.html">RUP</a>. Je ne l'ai pas test&eacute; mais je peux voir o&ugrave; vous aurez besoin d'outils de test (cf. illustration 9).
</p>
<p>
La plupart des testeurs unitaires sont dans une certaine mesure un clone de <a href="http://www.junit.org/">JUnit</a>, au moins dans l'interface. Il y a &eacute;norm&eacute;ment d'information sur le site de JUnit, &agrave; commencer par la <a href="http://junit.sourceforge.net/doc/faq/faq.htm">FAQ</a> quie contient pas mal de conseils g&eacute;n&eacute;raux sur les tests. Une fois mordu par le bogue vous appr&eacute;cierez s&ucirc;rement la phrase <a href="http://junit.sourceforge.net/doc/testinfected/testing.htm">infect&eacute; par les tests</a> trouv&eacute;e par Eric Gamma. Si vous &ecirc;tes encore en train de tergiverser sur un testeur unitaire, sachez que les choix principaux sont <a href="http://phpunit.sourceforge.net/">PHPUnit</a> et <a href="http://pear.php.net/manual/en/package.php.phpunit.php">Pear PHP::PHPUnit</a>. De nombreuses fonctionnalit&eacute;s de SimpleTest leurs font d&eacute;faut, mais la version PEAR a d'ores et d&eacute;j&agrave; &eacute;t&eacute; mise &agrave; jour pour PHP5. Elle est aussi recommand&eacute;e si vous portez des sc&eacute;narios de test existant depuis <a href="http://www.junit.org/">JUnit</a>.
</p>
<p>
Les d&eacute;veloppeurs de biblioth&egrave;que n'ont pas l'air de livrer tr&egrave;s souvent des tests avec leur code : c'est bien dommage. Le code d'une biblioth&egrave;que qui inclut des tests peut &ecirc;tre remani&eacute; avec plus de s&eacute;curit&eacute; et le code de test sert de documentation additionnelle dans un format assez standard. Ceci peut &eacute;pargner la p&ecirc;che aux indices dans le code source lorsque qu'un probl&egrave;me survient, en particulier lors de la mise &agrave; jour d'une telle biblioth&egrave;que. Parmi les biblioth&egrave;ques utilisant SimpleTest comme testeur unitaire on retrouve <a href="http://wact.sourceforge.net/">WACT</a> et <a href="http://sourceforge.net/projects/htmlsax">PEAR::XML_HTMLSax</a>.
</p>
<p>
Au jour d'aujourd'hui il manque tristement beaucoup de mati&egrave;re sur les objets fantaisie : dommage, surtout que tester unitairement sans eux repr&eacute;sente pas mal de travail en plus. L'<a href="http://www.sidewize.com/company/mockobjects.pdf">article original sur les objets fantaisie</a> est tr&egrave;s orient&eacute; Java, mais reste int&eacute;ressant &agrave; lire. Etant donn&eacute; qu'il s'agit d'une nouvelle technologie il y a beaucoup de discussions et de d&eacute;bats sur comment les utiliser, souvent sur des wikis comme <a href="http://xpdeveloper.com/cgi-bin/oldwiki.cgi?MockObjects">Extreme Tuesday</a> ou <a href="http://www.mockobjects.com/wiki/MocksObjectsPaper">www.mockobjects.com</a>ou <a href="http://c2.com/cgi/wiki?MockObject">the original C2 Wiki</a>. Injecter des objets fantaisie dans une classe est un des champs principaux du d&eacute;bat : cet <a href="http://www-106.ibm.com/developerworks/java/library/j-mocktest.html">article chez IBM</a> en est un bon point de d&eacute;part.
</p>
<p>
Il y a &eacute;normement d'outils de test web mais la plupart sont &eacute;crits en Java. De plus les tutoriels et autres conseils sont plut&ocirc;t rares. Votre seul espoir est de regarder directement la documentation pour <a href="http://httpunit.sourceforge.net/">HTTPUnit</a>, <a href="http://htmlunit.sourceforge.net/">HTMLUnit</a> ou <a href="http://jwebunit.sourceforge.net/">JWebUnit</a> et d'esp&eacute;rer y trouver pour des indices. Il y a aussi des frameworks bas&eacute;s sur XML, mais de nouveau la plupart ont besoin de Java pour tourner.
</p>
</div>
<div class="copyright">
Copyright<br>Marcus Baker, Jason Sweat, Perrick Penet 2004
</div>
</body>
</html>