From: <pp...@us...> - 2011-05-24 20:18:14
|
Revision: 2022 http://simpletest.svn.sourceforge.net/simpletest/?rev=2022&view=rev Author: pp11 Date: 2011-05-24 20:18:07 +0000 (Tue, 24 May 2011) Log Message: ----------- Keeping the french docs in synch II Modified Paths: -------------- simpletest/trunk/docs/source/fr/form_testing_documentation.xml simpletest/trunk/docs/source/fr/gain_control_tutorial.xml simpletest/trunk/docs/source/fr/group_test_documentation.xml Modified: simpletest/trunk/docs/source/fr/form_testing_documentation.xml =================================================================== --- simpletest/trunk/docs/source/fr/form_testing_documentation.xml 2011-05-23 21:16:47 UTC (rev 2021) +++ simpletest/trunk/docs/source/fr/form_testing_documentation.xml 2011-05-24 20:18:07 UTC (rev 2022) @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="ISO-8859-1" ?> <!-- $Id$ --> <page title="Documentation sur les tests de formulaire" here="Les tests des formulaires"> - <synchronisation lang="en" version="1687" date="24/03/2008" maintainer="pp11" /> + <synchronisation lang="en" version="1952" date="24/05/2011" maintainer="pp11" /> <long_title>Documentation SimpleTest : tester des formulaires HTML</long_title> <content> <section name="submit" title="Valider un formulaire simple"> @@ -13,12 +13,12 @@ \xE0 l'int\xE9rieur de la balise <form> sont disponibles depuis l'int\xE9rieur du sc\xE9nario de test. Prenons par exemple cet extrait de code HTML... -<pre><![CDATA[ +<php><![CDATA[ <form> <input type="text" name="a" value="A default" /> <input type="submit" value="Go" /> </form> -]]></pre> +]]></php> Il ressemble \xE0... </p> <p> @@ -32,8 +32,7 @@ <a href="http://www.lastcraft.com/form_testing_documentation.php">LastCraft</a>, avec le test suivant... <php><![CDATA[ -class SimpleFormTests extends WebTestCase { - <strong> +class SimpleFormTests extends WebTestCase {<strong> function testDefaultValue() { $this->get('http://www.lastcraft.com/form_testing_documentation.php'); $this->assertField('a', 'A default'); @@ -47,8 +46,16 @@ et qu'il contient la valeur "A default". </p> <p> - Nous pourrions retourner le formulaire tout de suite, - mais d'abord nous allons changer la valeur du champ texte. + Nous pourrions retourner le formulaire tout de suite... +<php><![CDATA[ +class SimpleFormTests extends WebTestCase { + function testDefaultValue() { + $this->get('http://www.lastcraft.com/form_testing_documentation.php'); + $this->assertField('a', <strong>new PatternExpectation('/default/')</strong>); + } +} +]]></php> + Mais d'abord nous allons changer la valeur du champ texte. Ce n'est qu'apr\xE8s que nous le transmettrons... <php><![CDATA[ class SimpleFormTests extends WebTestCase { @@ -65,15 +72,16 @@ sur la balise form, ni attribut "action", le sc\xE9nario de test suivra le comportement classique d'un navigateur : transmission des donn\xE9es avec une requ\xEAte <em>GET</em> - vers la m\xEAme page. SimpleTest essaie d'\xE9muler + vers la m\xEAme page. En r\xE8gle g\xE9n\xE9rale SimpleTest essaie d'\xE9muler le comportement typique d'un navigateur autant que possible, plut\xF4t que d'essayer d'attraper des attributs manquants sur les balises. La raison est simple : la cible d'un framework de test est la logique d'une application PHP, pas les erreurs -- de syntaxe ou autres -- du code HTML. Pour les erreurs HTML, d'autres outils tel - <a href="http://www.w3.org/People/Raggett/tidy/">HTMLTidy</a> - devraient \xEAtre employ\xE9s. + <a href="http://www.w3.org/People/Raggett/tidy/">HTMLTidy</a> + devraient \xEAtre employ\xE9s, ou m\xEAme n'importe lequel des validateurs HTML et CSS + d\xE9j\xE0 sur le march\xE9. </p> <p> Si un champ manque dans n'importe quel formulaire ou si @@ -81,14 +89,14 @@ renverra <code>false</code>. Par exemple, supposons que nous souhaitons v\xE9rifier qu'une option "Superuser" n'est pas pr\xE9sente dans ce formulaire... -<pre><![CDATA[ +<php><![CDATA[ <strong>Select type of user to add:</strong> <select name="type"> <option>Subscriber</option> <option>Author</option> <option>Administrator</option> </select> -]]></pre> +]]></php> Qui ressemble \xE0... </p> <p> @@ -112,8 +120,7 @@ } } ]]></php> - La s\xE9lection ne sera pas chang\xE9e suite \xE0 un \xE9chec d'initialisation - d'une valeur sur un objet. + La s\xE9lection ne sera pas chang\xE9e si la nouvelle valeur n'est pas une des options. </p> <p> Voici la liste compl\xE8te des objets support\xE9s \xE0 aujourd'hui... @@ -148,7 +155,7 @@ La nature de ceux-ci implique que leur initialisation et leur test sont l\xE9g\xE8rement diff\xE9rents. Voici un exemple avec des cases \xE0 cocher... -<pre><![CDATA[ +<php><![CDATA[ <form class="demo"> <strong>Create privileges allowed:</strong> <input type="checkbox" name="crud" value="c" checked><br> @@ -160,7 +167,7 @@ <input type="checkbox" name="crud" value="d" checked><br> <input type="submit" value="Enable Privileges"> </form> -]]></pre> +]]></php> Qui se traduit par... </p> <p> @@ -207,9 +214,9 @@ Le code suivant <em>ne fonctionnera pas</em> : <php><![CDATA[ class SimpleFormTests extends WebTestCase { - function testMyJavascriptForm() { - <strong>// Ne fonctionne *pas*</strong> - $this->setField('un_champ_cach\xE9', '123'); + function testEmulateMyJavascriptForm() { + <strong>// This does *not* work</strong> + $this->setField('a_hidden_field', '123'); $this->clickSubmit('OK'); } } @@ -219,8 +226,7 @@ <php><![CDATA[ class SimpleFormTests extends WebTestCase { function testMyJavascriptForm() { - // Ajoute le champ cach\xE9 comme variable POST suppl\xE9mentaire - <strong>$this->clickSubmit('OK', array('un_champ_cach\xE9'=>'123'));</strong> + <strong>$this->clickSubmit('OK', array('a_hidden_field'=>'123'));</strong> } } @@ -232,7 +238,7 @@ dans le formulaire) et que peut-\xEAtre serait-il plus prudent d'utiliser un outil comme <a href="http://selenium.openqa.org/">Selenium</a> pour mettre sur pied - un test de recette complet. + un test complet. </p> </section> <section name="brut" title="Envoi brut"> @@ -252,7 +258,11 @@ } ]]></php> En ajoutant des donn\xE9es \xE0 la m\xE9thode <code>WebTestCase::post()</code>, - nous essayons de t\xE9l\xE9charger la page via la transmission d'un formulaire. + nous \xE9mulons la transmission d'un formulaire. + D'ordinaire, vous ne ferez cela que pour parer au plus press\xE9, + ou alors si vous esp\xE9rez un tiers (javascript ?) transmette le formulaire. + Il reste quand m\xEAme exception : si vous souhaitez vous prot\xE9gez + d'attaques de type "spoofing". </p> </section> </content> Modified: simpletest/trunk/docs/source/fr/gain_control_tutorial.xml =================================================================== --- simpletest/trunk/docs/source/fr/gain_control_tutorial.xml 2011-05-23 21:16:47 UTC (rev 2021) +++ simpletest/trunk/docs/source/fr/gain_control_tutorial.xml 2011-05-24 20:18:07 UTC (rev 2022) @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="ISO-8859-1" ?> <!-- $Id$ --> <page title="Prendre le contr\xF4le des tests" here="Prendre le contr\xF4le des tests"> - <synchronisation lang="en" version="1687" date="24/03/2008" maintainer="pp11" /> + <synchronisation lang="en" version="1867" date="24/05/2011" maintainer="pp11" /> <long_title>Tutorial de test unitaire en PHP - Isoler les variables pendant le test</long_title> <content> <introduction> @@ -30,13 +30,15 @@ les droits de fichier et les ressources r\xE9seau, etc. L'\xE9chec ou la mauvaise installation de l'un ou l'autre de ces composants cassera la suite de test. + </p> + <p> Est-ce que nous devons ajouter des tests pour valider l'installation de ces composants ? C'est une bonne id\xE9e mais si vous les placez dans les tests du module de code vous aller commencer \xE0 encombrer votre code de test avec des d\xE9tails hors de propos avec la t\xE2che en cours. - Ils doivent \xEAtre plac\xE9s dans leur propre groupe de tests. + Ils doivent \xEAtre plac\xE9s dans leur propre suite de tests. </p> <p> Par contre un autre probl\xE8me reste : @@ -48,10 +50,10 @@ Devant un tel dilemme, nous cr\xE9erons souvent des versions enveloppantes des classes qui g\xE8rent ces ressources. Les vilains d\xE9tails de ces ressources sont ensuite cod\xE9s une seule fois. - J'aime bien appeler ces classes des "classes fronti\xE8re" + J'aime bien appeler ces classes des "classes passerelle" \xE9tant donn\xE9 qu'elles existent en bordure de l'application, l'interface entre votre application et le reste du syst\xE8me. - Ces classes fronti\xE8re sont - dans le meilleur des cas - simul\xE9es + Ces classes passerelle sont - dans le meilleur des cas - simul\xE9es pendant les tests par des versions de simulacre. Elles s'ex\xE9cutent plus rapidement et sont souvent appel\xE9es "bouchon serveur [Ndt : Server Stubs]" @@ -62,6 +64,8 @@ </p> <p> Un des facteurs souvent n\xE9glig\xE9s reste le temps. + </p> + <p> Par exemple, pour tester l'expiration d'une session des codeurs vont souvent temporairement en caler la dur\xE9e \xE0 une valeur tr\xE8s courte, disons 2 secondes, @@ -82,44 +86,36 @@ dans notre suite de test <em>tests/all_tests.php</em>... <php><![CDATA[ <?php -if (! defined('SIMPLE_TEST')) { - define('SIMPLE_TEST', 'simpletest/'); -} -require_once(SIMPLE_TEST . 'autorun.php'); -require_once('log_test.php');<strong> -require_once('clock_test.php');</strong> +require_once(dirname(__FILE__) . '/simpletest/autorun.php'); +require_once(dirname(__FILE__) . '/log_test.php'); +require_once(dirname(__FILE__) . '/clock_test.php'); -$test = &new TestSuite('All tests'); -$test->addTestCase(new TestOfLogging());<strong> -$test->addTestCase(new TestOfClock());</strong> -$test->run(new HtmlReporter()); +class AllTests extends TestSuite { + function __construct() { + parent::__construct(); + $this->addTest(new TestOfLogging());<strong> + $this->addTest(new TestOfClock());</strong> + } +} ?> ]]></php> Ensuite nous cr\xE9ons le sc\xE9nario de test dans un nouveau fichier <em>tests/clock_test.php</em>... <php><![CDATA[ -<strong><?php - require_once('../classes/clock.php'); - - class TestOfClock extends UnitTestCase { - function TestOfClock() { - $this->UnitTestCase('Clock class test'); - } - function testClockTellsTime() { - $clock = new Clock(); - $this->assertEqual($clock->now(), time(), 'Now is the right time'); - } - function testClockAdvance() { - } +<?php +require_once(dirname(__FILE__) . '/../classes/clock.php'); +<strong> +class TestOfClock extends UnitTestCase { + function testClockTellsTime() { + $clock = new Clock(); + $this->assertEqual($clock->now(), time()); } -?></strong> +}</strong> +?> ]]></php> Notre unique test pour le moment, c'est que notre nouvelle class <code>Clock</code> se comporte comme un simple substitut de la fonction <code>time()</code> en PHP. - L'autre m\xE9thode tient lieu d'emploi. - C'est notre <em>chose \xE0 faire</em> en quelque sorte. - Nous ne lui avons pas donn\xE9e de test parce que \xE7a casserait notre rythme. Nous \xE9crirons cette fonctionnalit\xE9 de d\xE9calage dans le temps une fois que nous serons au vert. Pour le moment nous ne sommes \xE9videmment pas dans le vert... @@ -129,33 +125,39 @@ <b>/home/marcus/projects/lastcraft/tutorial_tests/tests/clock_test.php</b> on line <b>2</b> <br /> </div> - Nous cr\xE9ons un fichier <em>classes/clock.php</em> comme ceci... + </p> + <p> + Si vous ne voyez pas ce genre d'erreurs, c'est probablement que vos param\xE8tres d'erreurs ont besoin + d'un petit ajustement. Vous aurez peut-\xEAtre envie d'ajouter ces quelques lignes + en t\xEAte de votre fichier de test : <php><![CDATA[ +ini_set('display_errors', 1); +error_reporting(E_ALL); +]]></php> + La documentation PHP pourrait devenir pratique si vous \xEAtes bloqu\xE9 + sans voire cette <code>Fatal error</code>. + </p> + <p> + Consid\xE9rons que l'erreur s'affiche bien, nous pouvons alors continuer + et cr\xE9er un fichier <em>classes/clock.php</em>... +<php><![CDATA[ <strong><?php - class Clock { - - function Clock() { - } - - function now() { - } +class Clock { + function now() { } +} ?></strong> ]]></php> De la sorte nous reprenons le cours du code. <div class="demo"> - <h1>All tests</h1> - <span class="fail">Fail</span>: Clock class test->testclocktellstime->[NULL: ] should be equal to [integer: 1050257362]<br /> + <h1>AllTests</h1> + <span class="fail">Fail</span>: TestOfClock -> testClockTellsTime -> [NULL: ] should be equal to [integer: 1050257362]<br /> <div style="padding: 8px; margin-top: 1em; background-color: red; color: white;">3/3 test cases complete. - <strong>4</strong> passes and <strong>1</strong> fails.</div> + <strong>4</strong> passes, <strong>1</strong> fails and <strong>0</strong> exceptions.</div> </div> Facile \xE0 corriger... <php><![CDATA[ class Clock { - - function Clock() { - } - function now() {<strong> return time();</strong> } @@ -163,11 +165,13 @@ ]]></php> Et nous revoici dans le vert... <div class="demo"> - <h1>All tests</h1> + <h1>AllTests</h1> <div style="padding: 8px; margin-top: 1em; background-color: green; color: white;">3/3 test cases complete. - <strong>5</strong> passes and <strong>0</strong> fails.</div> + <strong>5</strong> passes, <strong>0</strong> fails and <strong>0</strong> exceptions.</div> </div> - Il y a juste un petit probl\xE8me. + Il y a juste un petit probl\xE8me. + </p> + <p> L'horloge pourrait basculer pendant l'assertion et cr\xE9er un \xE9cart d'une seconde. Les probabilit\xE9s sont assez faibles mais s'il devait @@ -181,17 +185,16 @@ Le test d'avancement ressemble \xE0... <php><![CDATA[ class TestOfClock extends UnitTestCase { - function TestOfClock() { - $this->UnitTestCase('Clock class test'); - } + function testClockTellsTime() { $clock = new Clock(); - $this->assertEqual($clock->now(), time(), 'Now is the right time'); - }<strong> + $this->assertEqual($clock->now(), time()); + } + <strong> function testClockAdvance() { $clock = new Clock(); $clock->advance(10); - $this->assertEqual($clock->now(), time() + 10, 'Advancement'); + $this->assertEqual($clock->now(), time() + 10); }</strong> } ]]></php> @@ -199,24 +202,20 @@ il suffit d'ajouter un d\xE9calage de temps. <php><![CDATA[ class Clock {<strong> - var $_offset;</strong> + private $offset = 0;</strong> - function Clock() {<strong> - $this->_offset = 0;</strong> - } - function now() { - return time()<strong> + $this->_offset</strong>; + return time()<strong> + $this->offset</strong>; } <strong> function advance($offset) { - $this->_offset += $offset; + $this->offset += $offset; }</strong> } ]]></php> </p> </section> - <section name="nettoyer" title="Nettoyer le test de groupe"> + <section name="nettoyer" title="Nettoyer la suite de tests"> <p> Notre fichier <em>all_tests.php</em> contient des r\xE9p\xE9titions dont nous pourrions nous d\xE9barrasser. @@ -227,29 +226,22 @@ appel\xE9e <code>addTestFile()</code> qui prend un fichier PHP comme param\xE8tre. Ce m\xE9canisme prend note de toutes les classes : elle inclut le fichier et ensuite regarde toutes les classes - nouvellement cr\xE9\xE9es. S'il y a des filles de <code>TestCase</code> - elles sont ajout\xE9es au nouveau test de groupe. + nouvellement cr\xE9\xE9es. S'il y a des filles de <code>SimpleTestCase</code> + elles sont ajout\xE9es comme une nouvelle <code>TestSuite</code>. </p> <p> - En outre, la biblioth\xE8que <em>autorun</em> lancera tous les sc\xE9narios - de test collect\xE9s automagiquement apr\xE8s les avoir charg\xE9s. - </p> - <p> Voici notre suite de test remani\xE9e en appliquant cette m\xE9thode... <php><![CDATA[ -<?php -if (! defined('SIMPLE_TEST')) { - define('SIMPLE_TEST', 'simpletest/'); -}<strong> -require_once(SIMPLE_TEST . 'autorun.php');</strong> -<strong> +<?php<strong> +require_once(dirname(__FILE__) . '/simpletest/autorun.php');</strong> + class AllTests extends TestSuite { function AllTests() { - $this->TestSuite('All tests'); + parent::__construct();<strong> $this->addFile('log_test.php'); - $this->addFile('clock_test.php'); + $this->addFile('clock_test.php');</strong> } -}</strong> +} ?> ]]></php> Les inconv\xE9niants sont les suivants... @@ -260,14 +252,17 @@ </li> <li> Si le fichier de test contient d'autres classes - reli\xE9es \xE0 <code>TestCase</code> alors celles-ci + reli\xE9es \xE0 <code>SimpleTestCase</code> alors celles-ci aussi seront ajout\xE9 au test de groupe. </li> </ol> - Dans nos test nous n'avons que des sc\xE9narios dans les - fichiers de test et en plus nous avons supprim\xE9 - leur inclusion du script <em>all_tests.php</em> : - nous sommes donc en r\xE8gle. C'est la situation la plus commune. + In practice neither of these turn out to be problems. + Test suites are usually a tree structure, so + it's rare to need a test case in two places. + + En pratique, ni l'un ni l'autre ne sont v\xE9ritablement un soucis. + Les suites de tests sont g\xE9n\xE9ralement structur\xE9es en arbre, + il est donc tr\xE8s rare qu'un test se retrouve dans deux endroits. </p> <p> Nous devrions corriger au plus vite le petit probl\xE8me @@ -285,13 +280,13 @@ nous permet de modifier le temps. </link> <link> - <a href="#nettoyer">Nettoyer le test de groupe</a>. + <a href="#nettoyer">Nettoyer la suite de tests</a>. </link> </internal> <external> <link> La section pr\xE9c\xE9dente : - <a href="group_test_tutorial.php">grouper des tests unitaires</a>. + <a href="group_test_tutorial.php">grouper des tests unitaires en suite</a>. </link> <link> La section suivante : Modified: simpletest/trunk/docs/source/fr/group_test_documentation.xml =================================================================== --- simpletest/trunk/docs/source/fr/group_test_documentation.xml 2011-05-23 21:16:47 UTC (rev 2021) +++ simpletest/trunk/docs/source/fr/group_test_documentation.xml 2011-05-24 20:18:07 UTC (rev 2022) @@ -1,317 +1,186 @@ <?xml version="1.0" encoding="ISO-8859-1" ?> <!-- $Id$ --> <page title="Documentation sur le groupement des tests" here="Les groupes de tests"> - <synchronisation lang="en" version="1687" date="24/03/2008" maintainer="pp11" /> + <synchronisation lang="en" version="2007" date="24/05/2011" maintainer="pp11" /> <long_title>Documentation SimpleTest : Grouper des tests</long_title> <content> <section name="grouper" title="Grouper des tests"> <p> - Pour lancer les sc\xE9narios de tests en tant que groupe, - ils devraient \xEAtre plac\xE9s dans des fichiers sans le code du lanceur... + Il existe beaucoup de moyens pour grouper des tests dans des suites de tests. + Le premier d'entre eux est tout simplement ajouter tous les sc\xE9narios de test + au fur et \xE0 mesure d'un unique fichier... <php><![CDATA[ <strong><?php - require_once('../classes/io.php'); +require_once(dirname(__FILE__) . '/simpletest/autorun.php'); +require_once(dirname(__FILE__) . '/../classes/io.php'); - class FileTester extends UnitTestCase { - ... - } +class FileTester extends UnitTestCase { + ... +} - class SocketTester extends UnitTestCase { - ... - } +class SocketTester extends UnitTestCase { + ... +} ?></strong> ]]></php> Autant de sc\xE9narios que n\xE9cessaires peuvent \xEAtre - mis dans un fichier unique. Ils doivent contenir + mis dans cet unique fichier. Ils doivent contenir tout le code n\xE9cessaire, entre autres la biblioth\xE8que test\xE9e, mais aucune des biblioth\xE8ques de SimpleTest. </p> - <p> - Si vous avez \xE9tendu l'un ou l'autre des sc\xE9narios de test, - vous pouvez aussi les inclure. + <p> + Occasionnellement des sous-classes sp\xE9ciales sont cr\xE9\xE9s pour + ajouter des m\xE9thodes n\xE9cessaires \xE0 certains tests sp\xE9cifiques + au sein de l'application. + Ces nouvelles classes de base sont ensuite utilis\xE9es + \xE0 la place de <code>UnitTestCase</code> + ou de <code>WebTestCase</code>. + Bien s\xFBr vous ne souhaitez pas les lancer en tant que + sc\xE9nario de tests : il suffit alors de les identifier + comme "abstraites"... <php><![CDATA[ -<?php - require_once('../classes/io.php'); -<strong> - class MyFileTestCase extends UnitTestCase { - ... - } - SimpleTestOptions::ignore('MyFileTestCase');</strong> +<strong>abstract</strong> class MyFileTestCase extends UnitTestCase { + ... +} - class FileTester extends MyFileTestCase { - ... - } +class FileTester extends MyFileTestCase { ... } - class SocketTester extends UnitTestCase { - ... - } -?> +class SocketTester extends UnitTestCase { ... } ]]></php> La classe <code>FileTester</code> ne contient aucun test v\xE9ritable, il s'agit d'une classe de base pour d'autres sc\xE9narios de test. - Pour cette raison nous utilisons la directive - <code>SimpleTestOptions::ignore()</code> pour indiquer - au prochain groupe de tests de l'ignorer. - Cette directive peut se placer n'importe o\xF9 dans le fichier - et fonctionne quand un fichier complet des sc\xE9narios de test - est charg\xE9 (cf. ci-dessous). - Nous l'appelons <em>file_test.php</em>. - </p> - <p> - Ensuite nous cr\xE9ons un fichier de groupe de tests, - disons <em>group_test.php</em>. - Vous penserez \xE0 un nom plus convaincant, j'en suis s\xFBr. - Nous lui ajoutons le fichier de test avec une m\xE9thode sans risque... + </p> + <p> + Nous appelons ce fichier <em>file_test.php</em>. + Pour l'instant les sc\xE9narios de tests sont simplement group\xE9s dans le m\xEAme fichier. + Nous pouvons mettre en place des structures plus importantes + en incluant d'autres fichiers de tests. <php><![CDATA[ <?php - require_once('simpletest/unit_tester.php'); - require_once('simpletest/reporter.php');<strong> - require_once('file_test.php'); - - $test = &new GroupTest('All file tests'); - $test->addTestCase(new FileTestCase()); - $test->run(new HtmlReporter());</strong> +require_once('simpletest/autorun.php'); +require_once('file_test.php'); ?> ]]></php> - Ceci instancie le sc\xE9nario de test avant que - la suite de test ne soit lanc\xE9e. - \xC7a pourrait devenir assez on\xE9reux avec - un grand nombre de sc\xE9narios de test : - il existe donc une autre m\xE9thode qui instancie - la classe uniquement quand elle devient n\xE9cessaire... + Ceci fontionnera, tout en cr\xE9ant une hi\xE9rarchie tout \xE0 fait plate. + A la place, nous cr\xE9ons un fichier de suite de tests. + Notre suite des tests de premier niveau devient... <php><![CDATA[ <?php - require_once('simpletest/unit_tester.php'); - require_once('simpletest/reporter.php'); - require_once('file_test.php'); +require_once('simpletest/autorun.php'); - $test = &new GroupTest('All file tests');<strong> - $test->addTestClass('FileTestCase');</strong> - $test->run(new HtmlReporter()); +class AllFileTests extends TestSuite { + function __construct() { + parent::__construct(); + <strong>$this->addFile('file_test.php');</strong> + } +} ?> ]]></php> - Le probl\xE8me de cette technique est que pour - chaque sc\xE9nario de test suppl\xE9mentaire nous aurons \xE0 importer - (via <code>require_once()</code>) le fichier de code de test - et \xE0 instancier manuellement chaque sc\xE9nario de test. - Nous pouvons nous \xE9pargner beaucoup de dactylographie avec... + Voici ce qui arrive : la class <code>TestSuite</code> + effecturera le <code>require_once()</code> pour nous. + Ensuite elle v\xE9rifie si de nouvelles classes de test + ont \xE9t\xE9 cr\xE9\xE9es par ce nouveau fichier et les inclut + automatiquement dans la suite de tests. + Cette m\xE9thode nous donne un maximum de contr\xF4le + tout comme le ferait des ajouts manuels de fichiers de tests + au fur et \xE0 mesure o\xF9 notre suite grandit. + </p> + <p> + Si c'est trop de boulot pour vos petits doigts et qu'en plus + vous avez envie de grouper vos suites de tests par r\xE9pertoire + ou par un tag dans le nom des fichiers, alors il y a un moyen + encore plus automatique... <php><![CDATA[ <?php - require_once('simpletest/unit_tester.php'); - require_once('simpletest/reporter.php'); +require_once('simpletest/autorun.php'); - $test = &new GroupTest('All file tests');<strong> - $test->addTestFile('file_test.php');</strong> - $test->run(new HtmlReporter()); +class AllFileTests extends TestSuite { + function __construct() { + parent::__construct(); + $this->collect(dirname(__FILE__) . '/unit', + new SimplePatternCollector('/_test.php/')); + } +} ?> ]]></php> - Voici ce qui vient de se passer : - la classe <code>GroupTest</code> a r\xE9alis\xE9 le - <code>require_once()</code> pour nous. - Ensuite elle v\xE9rifie si de nouvelles classes de sc\xE9nario - de test ont \xE9t\xE9 cr\xE9\xE9es par ce nouveau fichier - et les ajoute automatiquement au groupe de tests. - D\xE9sormais tout ce qu'il nous reste \xE0 faire, - c'est d'ajouter chaque nouveau fichier. + Cette fonctionnalit\xE9s va scanner un r\xE9pertoire appel\xE9 "unit", + y d\xE9tecter tous les fichiers finissant par "_test.php" + et les charger. + Vous n'avez pas besoin d'utiliser <code>SimplePatternCollector</code> pour + filtrer en fonction d'un motif dans le nom de fichier, + mais c'est son usage le plus courant. </p> - <p> - Il y a deux choses qui peuvent planter - et qui demandent un minimum d'attention... - <ol> - <li> - Le fichier peut d\xE9j\xE0 avoir \xE9t\xE9 analys\xE9 par PHP - et dans ce cas aucune classe ne sera ajout\xE9e. - Pensez \xE0 bien v\xE9rifier que les sc\xE9narios de test - ne sont inclus que dans ce fichier et dans aucun autre - (Note : avec la nouvelle fonctionnalit\xE9 <cite>autorun</cite>, - ce probl\xE8me a maintenant \xE9t\xE9 r\xE9solu). - </li> - <li> - Les nouvelles classes d'extension de sc\xE9nario - de test qui sont incluses seront plac\xE9es - dans le groupe de tests et ex\xE9cut\xE9es par la m\xEAme occasion. - Vous aurez \xE0 ajouter une directive - <code>SimpleTestOptions::ignore()</code> pour ces classes - ou alors pensez \xE0 les ajouter avant la ligne - <code>GroupTest::addTestFile()</code>. - </li> - </ol> + <p> + Ce morceau de code est tr\xE8s courant. + D\xE9sormais la seule chose qu'il vous reste \xE0 faire, c'est de + d\xE9poser un fichier avec des sc\xE9narios de tests dans ce r\xE9pertoire + et il sera lanc\xE9 directement par le script de la suite de tests. </p> + <p> + Juste un b\xE9mol : vous ne pouvez pas contr\xF4ler l'ordre de lancement + des tests. + Si vous souhaitez voir des composants de bas niveau renvoyer leurs erreurs + d\xE8s le d\xE9but de la suite de tests - en particulier pour se facilier le travail + de diagnostic - alors vous devriez plut\xF4t passer par <code>addFile()</code> + pour ces cas sp\xE9cifiques. + Les sc\xE9narios de tests ne sont charg\xE9s qu'une fois, pas d'inqui\xE9tude donc + lors du scan de votre r\xE9pertoire avec tous les tests. + </p> + <p> + Les tests charg\xE9s avec la m\xE9thode <code>addFile</code> ont certaines propri\xE9t\xE9s + qui peuvent s'av\xE9rer int\xE9ressantes. + Elle vous assure que le constructeur est lanc\xE9 avant la premi\xE8re m\xE9thode + de test et que le destructeur est lanc\xE9 apr\xE8s la derni\xE8re m\xE9thode de test. + Cela vous permet de placer une initialisation (setUp et tearDown) globale + au sein de ce destructeur et desctructeur, comme dans n'importe + quelle classe. + </p> </section> <section name="plus-haut" title="Groupements de plus haut niveau"> - <p> + <p> La technique ci-dessus place tous les sc\xE9narios de test dans un unique et grand groupe. Sauf que pour des projets plus cons\xE9quents, ce n'est probablement pas assez souple; vous voudriez peut-\xEAtre grouper les tests tout \xE0 fait diff\xE9remment. </p> - <p> - Pour obtenir un groupe de tests plus souple - nous pouvons sous classer <code>GroupTest</code> - et ensuite l'instancier au cas par cas... +<p> + Tout ce que nous avons d\xE9crit avec des scripts de tests + s'applique pareillement avec des <code>TestSuite</code>s... <php><![CDATA[ <?php - require_once('simpletest/unit_tester.php'); - require_once('simpletest/reporter.php'); - <strong> - class FileGroupTest extends GroupTest { - function FileGroupTest() { - $this->GroupTest('All file tests'); - $this->addTestFile('file_test.php'); - } - }</strong> -?> -]]></php> - Ceci nomme le test dans le constructeur - et ensuite ajoute \xE0 la fois nos sc\xE9narios - de test et un unique groupe en dessous. - Bien s\xFBr nous pouvons ajouter plus d'un groupe \xE0 cet instant. - Nous pouvons maintenant invoquer les tests - \xE0 partir d'un autre fichier d'ex\xE9cution... -<php><![CDATA[ -<?php - require_once('file_group_test.php'); - <strong> - $test = &new FileGroupTest(); - $test->run(new HtmlReporter());</strong> -?> -]]></php> - ...ou alors nous pouvons les grouper - dans un groupe de tests encore plus grand... -<php><![CDATA[ -<?php - require_once('file_group_test.php'); - <strong> - $test = &new BigGroupTest('Big group'); - $test->addTestCase(new FileGroupTest()); - $test->addTestCase(...); - $test->run(new HtmlReporter());</strong> -?> -]]></php> - Si nous souhaitons lancer le groupe de tests original - sans utiliser ses petits fichiers d'ex\xE9cution, - nous pouvons mettre le code du lanceur de test - derri\xE8re des barreaux quand nous cr\xE9ons chaque groupe. -<php><![CDATA[ -<?php - class FileGroupTest extends GroupTest { - function FileGroupTest() { - $this->GroupTest('All file tests'); - $test->addTestFile('file_test.php'); - } +require_once('simpletest/autorun.php'); +<strong> +class BigTestSuite extends TestSuite { + function __construct() { + parent::__construct(); + $this->addFile('file_tests.php'); } - <strong> - if (! defined('RUNNER')) { - define('RUNNER', true);</strong> - $test = &new FileGroupTest(); - $test->run(new HtmlReporter()); - } +}</strong> ?> ]]></php> - Cette approche exige aux barri\xE8res d'\xEAtre activ\xE9es - \xE0 l'inclusion du fichier de groupe de tests, - mais c'est quand m\xEAme moins de tracas que beaucoup - de fichiers de lancement \xE9parpill\xE9s. - Reste \xE0 inclure des barreaux identiques - au niveau sup\xE9rieur afin de s'assurer que - le <code>run()</code> ne sera lanc\xE9 qu'une seule fois - \xE0 partir du script de haut niveau qui l'a invoqu\xE9. + Cette op\xE9ration additionne nos sc\xE9narios de tests et une unique suite + sous la premi\xE8re. + Quand un test \xE9choue, nous voyons le fil d'ariane avec l'enchainement. + Nous pouvons m\xEAme m\xE9langer groupes et tests librement en prenant + quand m\xEAme soin d'\xE9viter les inclusions en boucle. <php><![CDATA[ <?php - define('RUNNER', true); +require_once('simpletest/autorun.php'); - require_once('file_group_test.php'); - $test = &new BigGroupTest('Big group'); - $test->addTestCase(new FileGroupTest()); - $test->addTestCase(...); - $test->run(new HtmlReporter()); -?> -]]></php> - Comme les sc\xE9narios de test normaux, - un <code>GroupTest</code> peut \xEAtre charg\xE9 avec la m\xE9thode - <code>GroupTest::addTestFile()</code>. -<php><![CDATA[ -<?php - define('RUNNER', true); - - $test = &new BigGroupTest('Big group');<strong> - $test->addTestFile('file_group_test.php'); - $test->addTestFile(...);</strong> - $test->run(new HtmlReporter()); -?> -]]></php> - </p> - </section> - <section name="heritage" title="Int\xE9grer des sc\xE9narios de test h\xE9rit\xE9s"> - <p> - Si vous avez d\xE9j\xE0 des tests unitaires pour votre code - ou alors si vous \xE9tendez des classes externes - qui ont d\xE9j\xE0 leurs propres tests, il y a peu de chances - pour que ceux-ci soient d\xE9j\xE0 au format SimpleTest. - Heureusement il est possible d'incorporer ces sc\xE9narios - de test en provenance d'autres testeurs unitaires - directement dans des groupes de test SimpleTest. - </p> - <p> - Par exemple, supposons que nous ayons - ce sc\xE9nario de test pr\xE9vu pour - <a href="http://sourceforge.net/projects/phpunit">PhpUnit</a> - dans le fichier <em>config_test.php</em>... -<php><![CDATA[ -<strong>class ConfigFileTest extends TestCase { - function ConfigFileTest() { - $this->TestCase('Config file test'); +class BigTestSuite extends TestSuite { + function __construct() { + parent::__construct(); + $this->addFile('file_tests.php'); + <strong>$this->addFile('some_other_test.php');</strong> } - - function testContents() { - $config = new ConfigFile('test.conf'); - $this->assertRegexp('/me/', $config->getValue('username')); - } -}</strong> -]]></php> - Le groupe de tests peut le reconna\xEEtre \xE0 partir - du moment o\xF9 nous mettons l'adaptateur appropri\xE9 - avant d'ajouter le fichier de test... -<php><![CDATA[ -<?php - require_once('simpletest/unit_tester.php'); - require_once('simpletest/reporter.php');<strong> - require_once('simpletest/adapters/phpunit_test_case.php');</strong> - - $test = &new GroupTest('All file tests');<strong> - $test->addTestFile('config_test.php');</strong> - $test->run(new HtmlReporter()); +} ?> ]]></php> - Il n'y a que deux adaptateurs, - l'autre est pour le paquet testeur unitaire de - <a href="http://pear.php.net/manual/en/package.php.phpunit.php">PEAR</a>... -<php><![CDATA[ -<?php - require_once('simpletest/unit_tester.php'); - require_once('simpletest/reporter.php');<strong> - require_once('simpletest/adapters/pear_test_case.php');</strong> - - $test = &new GroupTest('All file tests');<strong> - $test->addTestFile('some_pear_test_cases.php');</strong> - $test->run(new HtmlReporter()); -?> -]]></php> - Les sc\xE9narios de test de PEAR peuvent \xEAtre - librement m\xE9lang\xE9s avec ceux de SimpleTest - mais vous ne pouvez pas utiliser les assertions - de SimpleTest au sein des versions h\xE9rit\xE9es - des sc\xE9narios de test. La raison ? - Une simple v\xE9rification que vous ne rendez pas - par accident vos sc\xE9narios de test compl\xE8tement - d\xE9pendants de SimpleTest. - Peut-\xEAtre que vous souhaitez publier - votre biblioth\xE8que sur PEAR par exemple : - \xE7a voudrait dire la livrer avec des sc\xE9narios de - test compatibles avec PEAR::PhpUnit. + Petite pr\xE9cision, en cas de double inclusion, seule la premi\xE8re instance + sera lanc\xE9e. </p> - </section> + </section> </content> <internal> <link> @@ -321,10 +190,6 @@ Combiner des groupes des tests dans des <a href="#plus-haut">groupes plus grands</a>. </link> - <link> - Int\xE9grer des <a href="#heritage">sc\xE9narios de test h\xE9rit\xE9s</a> - d'un autre type de PHPUnit. - </link> </internal> <external> <link> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |