From 322bb9cd2be9e51422cb2b82684692e825c2bfb7 Mon Sep 17 00:00:00 2001 From: brettp Date: Fri, 2 Oct 2009 18:40:04 +0000 Subject: Added simpletest and start of unit tests. git-svn-id: http://code.elgg.org/elgg/trunk@3503 36083f99-b078-4883-b0ff-0f9b5a30f544 --- .../docs/fr/group_test_documentation.html | 398 +++++++++++++++++++++ 1 file changed, 398 insertions(+) create mode 100755 vendors/simpletest/docs/fr/group_test_documentation.html (limited to 'vendors/simpletest/docs/fr/group_test_documentation.html') diff --git a/vendors/simpletest/docs/fr/group_test_documentation.html b/vendors/simpletest/docs/fr/group_test_documentation.html new file mode 100755 index 000000000..b993475ab --- /dev/null +++ b/vendors/simpletest/docs/fr/group_test_documentation.html @@ -0,0 +1,398 @@ + + + +Documentation SimpleTest : Grouper des tests + + + + +

Documentation sur le groupement des tests

+ This page... + +
+

Grouper des tests

+

+ Pour lancer les scénarios de tests en tant que groupe, + ils devraient être placés dans des fichiers sans le code du lanceur... +

+<?php
+    require_once('../classes/io.php');
+
+    class FileTester extends UnitTestCase {
+        ...
+    }
+
+    class SocketTester extends UnitTestCase {
+        ...
+    }
+?>
+
+ Autant de scénarios que nécessaires peuvent être + mis dans un fichier unique. Ils doivent contenir + tout le code nécessaire, entre autres la bibliothèque testée, + mais aucune des bibliothèques de SimpleTest. +

+

+ Si vous avez étendu l'un ou l'autre des scénarios de test, + vous pouvez aussi les inclure. +

+<?php
+    require_once('../classes/io.php');
+
+    class MyFileTestCase extends UnitTestCase {
+        ...
+    }
+    SimpleTestOptions::ignore('MyFileTestCase');
+
+    class FileTester extends MyFileTestCase {
+        ...
+    }
+
+    class SocketTester extends UnitTestCase {
+        ...
+    }
+?>
+
+ La classe FileTester ne contient aucun test véritable, + il s'agit d'une classe de base pour d'autres scénarios de test. + Pour cette raison nous utilisons la directive + SimpleTestOptions::ignore() pour indiquer + au prochain groupe de tests de l'ignorer. + Cette directive peut se placer n'importe où dans le fichier + et fonctionne quand un fichier complet des scénarios de test + est chargé (cf. ci-dessous). + Nous l'appelons file_test.php. +

+

+ Ensuite nous créons un fichier de groupe de tests, + disons group_test.php. + Vous penserez à un nom plus convaincant, j'en suis sûr. + Nous lui ajoutons le fichier de test avec une méthode sans risque... +

+<?php
+    require_once('simpletest/unit_tester.php');
+    require_once('simpletest/reporter.php');
+    require_once('file_test.php');
+
+    $test = &new GroupTest('All file tests');
+    $test->addTestCase(new FileTestCase());
+    $test->run(new HtmlReporter());
+?>
+
+ Ceci instancie le scénario de test avant que + la suite de test ne soit lancée. + Ça pourrait devenir assez onéreux avec + un grand nombre de scénarios de test : + il existe donc une autre méthode qui instancie + la classe uniquement quand elle devient nécessaire... +
+<?php
+    require_once('simpletest/unit_tester.php');
+    require_once('simpletest/reporter.php');
+    require_once('file_test.php');
+
+    $test = &new GroupTest('All file tests');
+    $test->addTestClass('FileTestCase');
+    $test->run(new HtmlReporter());
+?>
+
+ Le problème de cette technique est que pour + chaque scénario de test supplémentaire nous aurons à importer + (via require_once()) le fichier de code de test + et à instancier manuellement chaque scénario de test. + Nous pouvons nous épargner beaucoup de dactylographie avec... +
+<?php
+    require_once('simpletest/unit_tester.php');
+    require_once('simpletest/reporter.php');
+
+    $test = &new GroupTest('All file tests');
+    $test->addTestFile('file_test.php');
+    $test->run(new HtmlReporter());
+?>
+
+ Voici ce qui vient de se passer : + la classe GroupTest a réalisé le + require_once() pour nous. + Ensuite elle vérifie si de nouvelles classes de scénario + de test ont été créées par ce nouveau fichier + et les ajoute automatiquement au groupe de tests. + Désormais tout ce qu'il nous reste à faire, + c'est d'ajouter chaque nouveau fichier. +

+

+ Il y a deux choses qui peuvent planter + et qui demandent un minimum d'attention... +

    +
  1. + Le fichier peut déjà avoir été analysé par PHP + et dans ce cas aucune classe ne sera ajoutée. + Pensez à bien vérifier que les scénarios de test + ne sont inclus que dans ce fichier et dans aucun autre + (Note : avec la nouvelle fonctionnalité autorun, + ce problème a maintenant été résolu). +
  2. +
  3. + Les nouvelles classes d'extension de scénario + de test qui sont incluses seront placées + dans le groupe de tests et exécutées par la même occasion. + Vous aurez à ajouter une directive + SimpleTestOptions::ignore() pour ces classes + ou alors pensez à les ajouter avant la ligne + GroupTest::addTestFile(). +
  4. +
+

+ +

Groupements de plus haut niveau

+

+ La technique ci-dessus place tous les scénarios de test + dans un unique et grand groupe. + Sauf que pour des projets plus conséquents, + ce n'est probablement pas assez souple; + vous voudriez peut-être grouper les tests tout à fait différemment. +

+

+ Pour obtenir un groupe de tests plus souple + nous pouvons sous classer GroupTest + et ensuite l'instancier au cas par cas... +

+<?php
+    require_once('simpletest/unit_tester.php');
+    require_once('simpletest/reporter.php');
+    
+    class FileGroupTest extends GroupTest {
+        function FileGroupTest() {
+            $this->GroupTest('All file tests');
+            $this->addTestFile('file_test.php');
+        }
+    }
+?>
+
+ Ceci nomme le test dans le constructeur + et ensuite ajoute à la fois nos scénarios + de test et un unique groupe en dessous. + Bien sûr nous pouvons ajouter plus d'un groupe à cet instant. + Nous pouvons maintenant invoquer les tests + à partir d'un autre fichier d'exécution... +
+<?php
+    require_once('file_group_test.php');
+    
+    $test = &new FileGroupTest();
+    $test->run(new HtmlReporter());
+?>
+
+ ...ou alors nous pouvons les grouper + dans un groupe de tests encore plus grand... +
+<?php
+    require_once('file_group_test.php');
+    
+    $test = &new BigGroupTest('Big group');
+    $test->addTestCase(new FileGroupTest());
+    $test->addTestCase(...);
+    $test->run(new HtmlReporter());
+?>
+
+ Si nous souhaitons lancer le groupe de tests original + sans utiliser ses petits fichiers d'exécution, + nous pouvons mettre le code du lanceur de test + derrière des barreaux quand nous créons chaque groupe. +
+<?php
+    class FileGroupTest extends GroupTest {
+        function FileGroupTest() {
+            $this->GroupTest('All file tests');
+            $test->addTestFile('file_test.php');
+        }
+    }
+    
+    if (! defined('RUNNER')) {
+        define('RUNNER', true);
+        $test = &new FileGroupTest();
+        $test->run(new HtmlReporter());
+    }
+?>
+
+ Cette approche exige aux barrières d'être activées + à l'inclusion du fichier de groupe de tests, + mais c'est quand même moins de tracas que beaucoup + de fichiers de lancement éparpillés. + Reste à inclure des barreaux identiques + au niveau supérieur afin de s'assurer que + le run() ne sera lancé qu'une seule fois + à partir du script de haut niveau qui l'a invoqué. +
+<?php
+    define('RUNNER', true);
+
+    require_once('file_group_test.php');
+    $test = &new BigGroupTest('Big group');
+    $test->addTestCase(new FileGroupTest());
+    $test->addTestCase(...);
+    $test->run(new HtmlReporter());
+?>
+
+ Comme les scénarios de test normaux, + un GroupTest peut être chargé avec la méthode + GroupTest::addTestFile(). +
  
+<?php   
+    define('RUNNER', true); 
+        
+    $test = &new BigGroupTest('Big group'); 
+    $test->addTestFile('file_group_test.php');  
+    $test->addTestFile(...);   
+    $test->run(new HtmlReporter()); 
+?>  
+
+

+ +

Intégrer des scénarios de test hérités

+

+ Si vous avez déjà des tests unitaires pour votre code + ou alors si vous étendez des classes externes + qui ont déjà leurs propres tests, il y a peu de chances + pour que ceux-ci soient déjà au format SimpleTest. + Heureusement il est possible d'incorporer ces scénarios + de test en provenance d'autres testeurs unitaires + directement dans des groupes de test SimpleTest. +

+

+ Par exemple, supposons que nous ayons + ce scénario de test prévu pour + PhpUnit + dans le fichier config_test.php... +

+class ConfigFileTest extends TestCase {
+    function ConfigFileTest() {
+        $this->TestCase('Config file test');
+    }
+    
+    function testContents() {
+        $config = new ConfigFile('test.conf');
+        $this->assertRegexp('/me/', $config->getValue('username'));
+    }
+}
+
+ Le groupe de tests peut le reconnaître à partir + du moment où nous mettons l'adaptateur approprié + avant d'ajouter le fichier de test... +
+<?php
+    require_once('simpletest/unit_tester.php');
+    require_once('simpletest/reporter.php');
+    require_once('simpletest/adapters/phpunit_test_case.php');
+
+    $test = &new GroupTest('All file tests');
+    $test->addTestFile('config_test.php');
+    $test->run(new HtmlReporter());
+?>
+
+ Il n'y a que deux adaptateurs, + l'autre est pour le paquet testeur unitaire de + PEAR... +
+<?php
+    require_once('simpletest/unit_tester.php');
+    require_once('simpletest/reporter.php');
+    require_once('simpletest/adapters/pear_test_case.php');
+
+    $test = &new GroupTest('All file tests');
+    $test->addTestFile('some_pear_test_cases.php');
+    $test->run(new HtmlReporter());
+?>
+
+ Les scénarios de test de PEAR peuvent être + librement mélangés avec ceux de SimpleTest + mais vous ne pouvez pas utiliser les assertions + de SimpleTest au sein des versions héritées + des scénarios de test. La raison ? + Une simple vérification que vous ne rendez pas + par accident vos scénarios de test complètement + dépendants de SimpleTest. + Peut-être que vous souhaitez publier + votre bibliothèque sur PEAR par exemple : + ça voudrait dire la livrer avec des scénarios de + test compatibles avec PEAR::PhpUnit. +

+ +
+ References and related information... + + + + + -- cgit v1.2.3