source: trunk/server/www/vendors/simpletest/docs/fr/group_test_documentation.html @ 6

Last change on this file since 6 was 6, checked in by sander, 12 years ago

Added SimpleTest? test framework

File size: 15.6 KB
Line 
1<html>
2<head>
3<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
4<title>Documentation SimpleTest : Grouper des tests</title>
5<link rel="stylesheet" type="text/css" href="docs.css" title="Styles">
6</head>
7<body>
8<div class="menu_back"><div class="menu">
9<a href="index.html">SimpleTest</a>
10                |
11                <a href="overview.html">Overview</a>
12                |
13                <a href="unit_test_documentation.html">Unit tester</a>
14                |
15                <a href="group_test_documentation.html">Group tests</a>
16                |
17                <a href="mock_objects_documentation.html">Mock objects</a>
18                |
19                <a href="partial_mocks_documentation.html">Partial mocks</a>
20                |
21                <a href="reporter_documentation.html">Reporting</a>
22                |
23                <a href="expectation_documentation.html">Expectations</a>
24                |
25                <a href="web_tester_documentation.html">Web tester</a>
26                |
27                <a href="form_testing_documentation.html">Testing forms</a>
28                |
29                <a href="authentication_documentation.html">Authentication</a>
30                |
31                <a href="browser_documentation.html">Scriptable browser</a>
32</div></div>
33<h1>Documentation sur le groupement des tests</h1>
34        This page...
35        <ul>
36<li>
37            Plusieurs approches pour <a href="#group">grouper des tests</a> ensemble.
38        </li>
39<li>
40            Combiner des groupes des tests dans des
41            <a href="#plus-haut">groupes plus grands</a>.
42        </li>
43<li>
44            Intégrer des <a href="#heritage">scénarios de test hérités</a>
45            d'un autre type de PHPUnit.
46        </li>
47</ul>
48<div class="content">
49        <p><a class="target" name="grouper"><h2>Grouper des tests</h2></a></p>
50            <p>
51                Pour lancer les scénarios de tests en tant que groupe,
52                ils devraient être placés dans des fichiers sans le code du lanceur...
53<pre>
54<strong>&lt;?php
55    require_once('../classes/io.php');
56
57    class FileTester extends UnitTestCase {
58        ...
59    }
60
61    class SocketTester extends UnitTestCase {
62        ...
63    }
64?&gt;</strong>
65</pre>
66                Autant de scénarios que nécessaires peuvent être
67                mis dans un fichier unique. Ils doivent contenir
68                tout le code nécessaire, entre autres la bibliothÚque testée,
69                mais aucune des bibliothÚques de SimpleTest.
70            </p>
71            <p>
72                Si vous avez étendu l'un ou l'autre des scénarios de test,
73                vous pouvez aussi les inclure.
74<pre>
75&lt;?php
76    require_once('../classes/io.php');
77<strong>
78    class MyFileTestCase extends UnitTestCase {
79        ...
80    }
81    SimpleTestOptions::ignore('MyFileTestCase');</strong>
82
83    class FileTester extends MyFileTestCase {
84        ...
85    }
86
87    class SocketTester extends UnitTestCase {
88        ...
89    }
90?&gt;
91</pre>
92                La classe <span class="new_code">FileTester</span> ne contient aucun test véritable,
93                il s'agit d'une classe de base pour d'autres scénarios de test.
94                Pour cette raison nous utilisons la directive
95                <span class="new_code">SimpleTestOptions::ignore()</span> pour indiquer
96                au prochain groupe de tests de l'ignorer.
97                Cette directive peut se placer n'importe où dans le fichier
98                et fonctionne quand un fichier complet des scénarios de test
99                est chargé (cf. ci-dessous).
100                Nous l'appelons <em>file_test.php</em>.
101            </p>
102            <p>
103                Ensuite nous créons un fichier de groupe de tests,
104                disons <em>group_test.php</em>.
105                Vous penserez à un nom plus convaincant, j'en suis sûr.
106                Nous lui ajoutons le fichier de test avec une méthode sans risque...
107<pre>
108&lt;?php
109    require_once('simpletest/unit_tester.php');
110    require_once('simpletest/reporter.php');<strong>
111    require_once('file_test.php');
112
113    $test = &amp;new GroupTest('All file tests');
114    $test-&gt;addTestCase(new FileTestCase());
115    $test-&gt;run(new HtmlReporter());</strong>
116?&gt;
117</pre>
118                Ceci instancie le scénario de test avant que
119                la suite de test ne soit lancée.
120                Ça pourrait devenir assez onéreux avec
121                un grand nombre de scénarios de test :
122                il existe donc une autre méthode qui instancie
123                la classe uniquement quand elle devient nécessaire...
124<pre>
125&lt;?php
126    require_once('simpletest/unit_tester.php');
127    require_once('simpletest/reporter.php');
128    require_once('file_test.php');
129
130    $test = &amp;new GroupTest('All file tests');<strong>
131    $test-&gt;addTestClass('FileTestCase');</strong>
132    $test-&gt;run(new HtmlReporter());
133?&gt;
134</pre>
135                Le problÚme de cette technique est que pour
136                chaque scénario de test supplémentaire nous aurons à importer
137                (via <span class="new_code">require_once()</span>) le fichier de code de test
138                et à instancier manuellement chaque scénario de test.
139                Nous pouvons nous épargner beaucoup de dactylographie avec...
140<pre>
141&lt;?php
142    require_once('simpletest/unit_tester.php');
143    require_once('simpletest/reporter.php');
144
145    $test = &amp;new GroupTest('All file tests');<strong>
146    $test-&gt;addTestFile('file_test.php');</strong>
147    $test-&gt;run(new HtmlReporter());
148?&gt;
149</pre>
150                Voici ce qui vient de se passer :
151                la classe <span class="new_code">GroupTest</span> a réalisé le
152                <span class="new_code">require_once()</span> pour nous.
153                Ensuite elle vérifie si de nouvelles classes de scénario
154                de test ont été créées par ce nouveau fichier
155                et les ajoute automatiquement au groupe de tests.
156                Désormais tout ce qu'il nous reste à faire,
157                c'est d'ajouter chaque nouveau fichier.
158            </p>
159            <p>
160                Il y a deux choses qui peuvent planter
161                et qui demandent un minimum d'attention...
162                <ol>
163                    <li>
164                        Le fichier peut déjà avoir été analysé par PHP
165                        et dans ce cas aucune classe ne sera ajoutée.
166                        Pensez à bien vérifier que les scénarios de test
167                        ne sont inclus que dans ce fichier et dans aucun autre
168                        (Note : avec la nouvelle fonctionnalité <cite>autorun</cite>,
169                        ce problÚme a maintenant été résolu).
170                    </li>
171                    <li>
172                        Les nouvelles classes d'extension de scénario
173                        de test qui sont incluses seront placées
174                        dans le groupe de tests et exécutées par la même occasion.
175                        Vous aurez à ajouter une directive
176                        <span class="new_code">SimpleTestOptions::ignore()</span> pour ces classes
177                        ou alors pensez à les ajouter avant la ligne
178                        <span class="new_code">GroupTest::addTestFile()</span>.
179                    </li>
180                </ol>
181            </p>
182       
183        <p><a class="target" name="plus-haut"><h2>Groupements de plus haut niveau</h2></a></p>
184            <p>
185                La technique ci-dessus place tous les scénarios de test
186                dans un unique et grand groupe.
187                Sauf que pour des projets plus conséquents,
188                ce n'est probablement pas assez souple;
189                vous voudriez peut-être grouper les tests tout à fait différemment.
190            </p>
191            <p>
192                Pour obtenir un groupe de tests plus souple
193                nous pouvons sous classer <span class="new_code">GroupTest</span>
194                et ensuite l'instancier au cas par cas...
195<pre>
196&lt;?php
197    require_once('simpletest/unit_tester.php');
198    require_once('simpletest/reporter.php');
199    <strong>
200    class FileGroupTest extends GroupTest {
201        function FileGroupTest() {
202            $this-&gt;GroupTest('All file tests');
203            $this-&gt;addTestFile('file_test.php');
204        }
205    }</strong>
206?&gt;
207</pre>
208                Ceci nomme le test dans le constructeur
209                et ensuite ajoute à la fois nos scénarios
210                de test et un unique groupe en dessous.
211                Bien sûr nous pouvons ajouter plus d'un groupe à cet instant.
212                Nous pouvons maintenant invoquer les tests
213                à partir d'un autre fichier d'exécution...
214<pre>
215&lt;?php
216    require_once('file_group_test.php');
217    <strong>
218    $test = &amp;new FileGroupTest();
219    $test-&gt;run(new HtmlReporter());</strong>
220?&gt;
221</pre>
222                ...ou alors nous pouvons les grouper
223                dans un groupe de tests encore plus grand...
224<pre>
225&lt;?php
226    require_once('file_group_test.php');
227    <strong>
228    $test = &amp;new BigGroupTest('Big group');
229    $test-&gt;addTestCase(new FileGroupTest());
230    $test-&gt;addTestCase(...);
231    $test-&gt;run(new HtmlReporter());</strong>
232?&gt;
233</pre>
234                Si nous souhaitons lancer le groupe de tests original
235                sans utiliser ses petits fichiers d'exécution,
236                nous pouvons mettre le code du lanceur de test
237                derriÚre des barreaux quand nous créons chaque groupe.
238<pre>
239&lt;?php
240    class FileGroupTest extends GroupTest {
241        function FileGroupTest() {
242            $this-&gt;GroupTest('All file tests');
243            $test-&gt;addTestFile('file_test.php');
244        }
245    }
246    <strong>
247    if (! defined('RUNNER')) {
248        define('RUNNER', true);</strong>
249        $test = &amp;new FileGroupTest();
250        $test-&gt;run(new HtmlReporter());
251    }
252?&gt;
253</pre>
254                Cette approche exige aux barriÚres d'être activées
255                à l'inclusion du fichier de groupe de tests,
256                mais c'est quand même moins de tracas que beaucoup
257                de fichiers de lancement éparpillés.
258                Reste à inclure des barreaux identiques
259                au niveau supérieur afin de s'assurer que
260                le <span class="new_code">run()</span> ne sera lancé qu'une seule fois
261                à partir du script de haut niveau qui l'a invoqué.
262<pre>
263&lt;?php
264    define('RUNNER', true);
265
266    require_once('file_group_test.php');
267    $test = &amp;new BigGroupTest('Big group');
268    $test-&gt;addTestCase(new FileGroupTest());
269    $test-&gt;addTestCase(...);
270    $test-&gt;run(new HtmlReporter());
271?&gt;
272</pre>
273                Comme les scénarios de test normaux,
274                un <span class="new_code">GroupTest</span> peut être chargé avec la méthode
275                <span class="new_code">GroupTest::addTestFile()</span>.
276<pre> 
277&lt;?php   
278    define('RUNNER', true);
279       
280    $test = &amp;new BigGroupTest('Big group');<strong> 
281    $test-&gt;addTestFile('file_group_test.php'); 
282    $test-&gt;addTestFile(...);</strong>   
283    $test-&gt;run(new HtmlReporter());
284?&gt; 
285</pre>
286            </p>
287       
288        <p><a class="target" name="heritage"><h2>Intégrer des scénarios de test hérités</h2></a></p>
289            <p>
290                Si vous avez déjà des tests unitaires pour votre code
291                ou alors si vous étendez des classes externes
292                qui ont déjà leurs propres tests, il y a peu de chances
293                pour que ceux-ci soient déjà au format SimpleTest.
294                Heureusement il est possible d'incorporer ces scénarios
295                de test en provenance d'autres testeurs unitaires
296                directement dans des groupes de test SimpleTest.
297            </p>
298            <p>
299                Par exemple, supposons que nous ayons
300                ce scénario de test prévu pour
301                <a href="http://sourceforge.net/projects/phpunit">PhpUnit</a>
302                dans le fichier <em>config_test.php</em>...
303<pre>
304<strong>class ConfigFileTest extends TestCase {
305    function ConfigFileTest() {
306        $this-&gt;TestCase('Config file test');
307    }
308   
309    function testContents() {
310        $config = new ConfigFile('test.conf');
311        $this-&gt;assertRegexp('/me/', $config-&gt;getValue('username'));
312    }
313}</strong>
314</pre>
315                Le groupe de tests peut le reconnaître à partir
316                du moment où nous mettons l'adaptateur approprié
317                avant d'ajouter le fichier de test...
318<pre>
319&lt;?php
320    require_once('simpletest/unit_tester.php');
321    require_once('simpletest/reporter.php');<strong>
322    require_once('simpletest/adapters/phpunit_test_case.php');</strong>
323
324    $test = &amp;new GroupTest('All file tests');<strong>
325    $test-&gt;addTestFile('config_test.php');</strong>
326    $test-&gt;run(new HtmlReporter());
327?&gt;
328</pre>
329                Il n'y a que deux adaptateurs,
330                l'autre est pour le paquet testeur unitaire de
331                <a href="http://pear.php.net/manual/en/package.php.phpunit.php">PEAR</a>...
332<pre>
333&lt;?php
334    require_once('simpletest/unit_tester.php');
335    require_once('simpletest/reporter.php');<strong>
336    require_once('simpletest/adapters/pear_test_case.php');</strong>
337
338    $test = &amp;new GroupTest('All file tests');<strong>
339    $test-&gt;addTestFile('some_pear_test_cases.php');</strong>
340    $test-&gt;run(new HtmlReporter());
341?&gt;
342</pre>
343                Les scénarios de test de PEAR peuvent être
344                librement mélangés avec ceux de SimpleTest
345                mais vous ne pouvez pas utiliser les assertions
346                de SimpleTest au sein des versions héritées
347                des scénarios de test. La raison ?
348                Une simple vérification que vous ne rendez pas
349                par accident vos scénarios de test complÚtement
350                dépendants de SimpleTest.
351                Peut-être que vous souhaitez publier
352                votre bibliothÚque sur PEAR par exemple :
353                ça voudrait dire la livrer avec des scénarios de
354                test compatibles avec PEAR::PhpUnit.
355            </p>
356       
357    </div>
358        References and related information...
359        <ul>
360<li>
361            La page du projet SimpleTest sur
362            <a href="http://sourceforge.net/projects/simpletest/">SourceForge</a>.
363        </li>
364<li>
365            La page de téléchargement de SimpleTest sur
366            <a href="http://www.lastcraft.com/simple_test.php">LastCraft</a>.
367        </li>
368</ul>
369<div class="menu_back"><div class="menu">
370<a href="index.html">SimpleTest</a>
371                |
372                <a href="overview.html">Overview</a>
373                |
374                <a href="unit_test_documentation.html">Unit tester</a>
375                |
376                <a href="group_test_documentation.html">Group tests</a>
377                |
378                <a href="mock_objects_documentation.html">Mock objects</a>
379                |
380                <a href="partial_mocks_documentation.html">Partial mocks</a>
381                |
382                <a href="reporter_documentation.html">Reporting</a>
383                |
384                <a href="expectation_documentation.html">Expectations</a>
385                |
386                <a href="web_tester_documentation.html">Web tester</a>
387                |
388                <a href="form_testing_documentation.html">Testing forms</a>
389                |
390                <a href="authentication_documentation.html">Authentication</a>
391                |
392                <a href="browser_documentation.html">Scriptable browser</a>
393</div></div>
394<div class="copyright">
395            Copyright<br>Marcus Baker 2006
396        </div>
397</body>
398</html>
Note: See TracBrowser for help on using the repository browser.