cakephp2-php8/vendors/simpletest/docs/fr/overview.html
pies da79dff7d7 - merged in Brego's SimpleTest implementation, fixed some of the tests (the Folder test fails to delete one of the test directories on my system, so it's not perfectly clean yet)
- Dispatcher sets a Controller::here variable with the real URL used to access the page, so that tag generators can that use an url (linkTo and formTag for example) use the real url, not guess it from the controller and action names which often fails
- Log class works more reliably and a LogError() shortcut function was added
- Nstring class added, to store string-related functions (there are just four yet, including a random password generator and an string-to-array splitter
- SimpleTest library (with Rephlux) included in /vendors; I've tweaked SimpleScorer::inCli() function, because it didn't work on my setup, it should work everywhere now (it checks for empty REQUEST_METHOD, which should only be empty in CLI)

git-svn-id: https://svn.cakephp.org/repo/trunk/cake@248 3807eeeb-6ff5-0310-8944-8be069107fe0
2005-06-18 23:26:35 +00:00

294 lines
20 KiB
HTML

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