1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255
|
<?xml version="1.0" encoding="ISO-8859-1" ?>
<page title="Documentation sur le groupement des tests" here="Les groupes de tests">
<long_title>Documentation SimpleTest : Grouper des tests</long_title>
<content>
<section name="grouper" title="Grouper des tests">
<p>
Pour lancer les scnarios de tests en tant que groupe, ils devraient tre placs dans des fichiers sans le code du lanceur...
<php><![CDATA[
<strong><?php
require_once('../classes/io.php');
class FileTester extends UnitTestCase {
...
}
class SocketTester extends UnitTestCase {
...
}
?></strong>
]]></php>
Autant de scnarios que ncessaires peuvent tre mis dans un fichier unique. Ils doivent contenir tout le code ncessaire, entre autres la bibliothque teste, mais aucune des bibliothques de SimpleTest.
</p>
<p>
Si vous avez tendu l'un ou l'autre des scnarios de test, vous pouvez aussi les inclure.
<php><![CDATA[
<?php
require_once('../classes/io.php');
<strong>
class MyFileTestCase extends UnitTestCase {
...
}
SimpleTestOptions::ignore('MyFileTestCase');</strong>
class FileTester extends MyFileTestCase {
...
}
class SocketTester extends UnitTestCase {
...
}
?>
]]></php>
La classe <code>FileTester</code> ne contient aucun test vritable, il s'agit d'une classe de base pour d'autres scnarios 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 dans le fichier et fonctionne quand un fichier complet des scnarios de test est charg (cf. ci-dessous). Nous l'appelons <em>file_test.php</em>.
</p>
<p>
Ensuite nous crons un fichier de groupe de tests, disons <em>group_test.php</em>. Vous penserez un nom plus convaincant, j'en suis sr. Nous lui ajoutons le fichier de test avec une mthode sans risque...
<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>
?>
]]></php>
Ceci instancie le scnario de test avant que la suite de test ne soit lance. a pourrait devenir assez onreux avec un grand nombre de scnarios de test : il existe donc une autre mthode qui instancie la classe uniquement quand elle devient ncessaire...
<php><![CDATA[
<?php
require_once('simpletest/unit_tester.php');
require_once('simpletest/reporter.php');
require_once('file_test.php');
$test = &new GroupTest('All file tests');<strong>
$test->addTestClass('FileTestCase');</strong>
$test->run(new HtmlReporter());
?>
]]></php>
Le problme de cette technique est que pour chaque scnario de test supplmentaire nous aurons importer (via <code>require_once()</code>) le fichier de code de test et instancier manuellement chaque scnario de test. Nous pouvons nous pargner beaucoup de dactylographie avec...
<php><![CDATA[
<?php
require_once('simpletest/unit_tester.php');
require_once('simpletest/reporter.php');
$test = &new GroupTest('All file tests');<strong>
$test->addTestFile('file_test.php');</strong>
$test->run(new HtmlReporter());
?>
]]></php>
Voici ce qui vient de se passer : la classe <code>GroupTest</code> a ralis le <code>require_once()</code> pour nous. Ensuite elle vrifie si de nouvelles classes de scnario de test ont t cres par ce nouveau fichier et les ajoute automatiquement au groupe de tests. Dsormais tout ce qu'il nous reste faire, c'est d'ajouter chaque nouveau fichier.
</p>
<p>
Il y a deux choses qui peuvent planter et qui demandent un minimum d'attention...
<ol>
<li>
Le fichier peut dj avoir t analys par PHP et dans ce cas aucune classe ne sera ajoute. Pensez bien vrifier que les scnarios de test ne sont inclus que dans ce fichier et dans aucun autre.
</li>
<li>
Les nouvelles classes d'extension de scnario de test qui sont incluses seront places dans le groupe de tests et excutes par la mme occasion. Vous aurez ajouter une directive <code>SimpleTestOptions::ignore()</code> pour ces classes ou alors pensez les ajouter avant la ligne <code>GroupTest::addTestFile()</code>.
</li>
</ol>
</p>
</section>
<section name="plus-haut" title="Groupements de plus haut niveau">
<p>
La technique ci-dessus place tous les scnarios de test dans un unique et grand groupe. Sauf que pour des projets plus consquents, ce n'est probablement pas assez souple ; vous voudriez peut-tre grouper les tests tout fait diffremment.
</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...
<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 la fois nos scnarios de test et un unique groupe en dessous. Bien sr nous pouvons ajouter plus d'un groupe cet instant. Nous pouvons maintenant invoquer les tests partir d'un autre fichier d'excution...
<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'excution, nous pouvons mettre le code du lanceur de test derrire des barreaux quand nous crons chaque groupe.
<php><![CDATA[
<?php
class FileGroupTest extends GroupTest {
function FileGroupTest() {
$this->GroupTest('All file tests');
$test->addTestFile('file_test.php');
}
}
<strong>
if (! defined('RUNNER')) {
define('RUNNER', true);</strong>
$test = &new FileGroupTest();
$test->run(new HtmlReporter());
}
?>
]]></php>
Cette approche exige aux barrires d'tre actives l'inclusion du fichier de groupe de tests, mais c'est quand mme moins de tracas que beaucoup de fichiers de lancement parpills. Reste inclure des barreaux identiques au niveau suprieur afin de s'assurer que le <code>run()</code> ne sera lanc qu'une seule fois partir du script de haut niveau qui l'a invoqu.
<php><![CDATA[
<?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());
?>
]]></php>
Comme les scnarios de test normaux, un <code>GroupTest</code> peut tre charg avec la mthode <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="Intgrer des scnarios de test hrits">
<p>
Si vous avez dj des tests unitaires pour votre code ou alors si vous tendez des classes externes qui ont dj leurs propres tests, il y a peu de chances pour que ceux-ci soient dj au format SimpleTest. Heureusement il est possible d'incorporer ces scnarios de test en provenance d'autres testeurs unitaires directement dans des groupes de test SimpleTest.
</p>
<p>
Par exemple, supposons que nous ayons ce scnario de test prvu 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');
}
function testContents() {
$config = new ConfigFile('test.conf');
$this->assertRegexp('/me/', $config->getValue('username'));
}
}</strong>
]]></php>
Le groupe de tests peut le reconnatre partir du moment o nous mettons l'adaptateur appropri 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 scnarios de test de PEAR peuvent tre librement mlangs avec ceux de SimpleTest mais vous ne pouvez pas utiliser les assertions de SimpleTest au sein des versions hrites des scnarios de test. La raison ? Une simple vrification que vous ne rendez pas par accident vos scnarios de test compltement dpendants de SimpleTest. Peut-tre que vous souhaitez publier votre bibliothque sur PEAR par exemple : a voudrait dire la livrer avec des scnarios de test compatibles avec PEAR::PhpUnit.
</p>
</section>
</content>
<internal>
<link>
Plusieurs approches pour <a href="#group">grouper des tests</a> ensemble.
</link>
<link>
Combiner des groupes des tests dans des <a href="#plus-haut">groupes plus grands</a>.
</link>
<link>
Intgrer des <a href="#heritage">scnarios de test hrits</a> d'un autre type de PHPUnit.
</link>
</internal>
<external>
<link>
La page du projet SimpleTest sur <a href="http://sourceforge.net/projects/simpletest/">SourceForge</a>.
</link>
<link>
La page de tlchargement de SimpleTest sur <a href="http://www.lastcraft.com/simple_test.php">LastCraft</a>.
</link>
</external>
<meta>
<keywords>
test unitaire en php,
intgration de test,
documentation,
marcus baker,
perrick penet,
test simple,
documentation simpletest,
phpunit,
pear
</keywords>
</meta>
</page>
|