source: trunk/server/www/vendors/simpletest/docs/fr/unit_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: 17.8 KB
Line 
1<html>
2<head>
3<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
4<title>Documentation SimpleTest pour les tests de régression en PHP</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 les tests unitaires en PHP</h1>
34        This page...
35        <ul>
36<li>
37            <a href="#unitaire">Scénarios de test unitaire</a>
38            et opérations basiques.
39        </li>
40<li>
41            <a href="#extension_unitaire">Étendre des scénarios de test</a>
42            pour les personnaliser à votre propre projet.
43        </li>
44<li>
45            <a href="#lancement_unitaire">Lancer un scénario seul</a>
46            comme un script unique.
47        </li>
48</ul>
49<div class="content">
50        <p><a class="target" name="unitaire"><h2>Scénarios de tests unitaires</h2></a></p>
51            <p>
52                Le coeur du systÚme est un framework de tests de régression
53                construit autour des scénarios de test.
54                Un exemple de scénario de test ressemble à...
55<pre>
56<strong>class FileTestCase extends UnitTestCase {
57}</strong>
58</pre>
59                Si aucun nom de test n'est fourni au moment
60                de la liaison avec le constructeur alors
61                le nom de la classe sera utilisé.
62                Il s'agit du nom qui sera affiché dans les résultats du test.
63            </p>
64            <p>
65                Les véritables tests sont ajoutés en tant que méthode
66                dans le scénario de test dont le nom par défaut
67                commence par la chaîne "test"
68                et quand le scénario de test est appelé toutes les méthodes
69                de ce type sont exécutées dans l'ordre utilisé
70                par l'introspection de PHP pour les trouver.
71                Peuvent être ajoutées autant de méthodes de test que nécessaires.
72                Par exemple...
73<pre>
74require_once('simpletest/autorun.php');
75require_once('../classes/writer.php');
76
77class FileTestCase extends UnitTestCase {
78    function FileTestCase() {
79        $this-&gt;UnitTestCase('File test');
80    }<strong>
81   
82    function setUp() {
83        @unlink('../temp/test.txt');
84    }
85   
86    function tearDown() {
87        @unlink('../temp/test.txt');
88    }
89   
90    function testCreation() {
91        $writer = &amp;new FileWriter('../temp/test.txt');
92        $writer-&gt;write('Hello');
93        $this-&gt;assertTrue(file_exists('../temp/test.txt'), 'File created');
94    }</strong>
95}
96</pre>
97                Le constructeur est optionnel et souvent omis. Sans nom,
98                le nom de la classe est utilisé comme nom pour le scénario de test.
99            </p>
100            <p>
101                Notre unique méthode de test pour le moment est
102                <span class="new_code">testCreation()</span> où nous vérifions
103                qu'un fichier a bien été créé par notre objet
104                <span class="new_code">Writer</span>. Nous pourrions avoir mis
105                le code <span class="new_code">unlink()</span> dans cette méthode,
106                mais en la plaçant dans <span class="new_code">setUp()</span>
107                et <span class="new_code">tearDown()</span> nous pouvons l'utiliser
108                pour nos autres méthodes de test que nous ajouterons.
109            </p>
110            <p>
111                La méthode <span class="new_code">setUp()</span> est lancé
112                juste avant chaque méthode de test.
113                <span class="new_code">tearDown()</span> est lancé aprÚs chaque méthode de test.
114            </p>
115            <p>
116                Vous pouvez placer une initialisation de
117                scénario de test dans le constructeur afin qu'elle soit lancée
118                pour toutes les méthodes dans le scénario de test
119                mais dans un tel cas vous vous exposeriez à des interférences.
120                Cette façon de faire est légÚrement moins rapide,
121                mais elle est plus sûre.
122                Notez que si vous arrivez avec des notions de JUnit,
123                il ne s'agit pas du comportement auquel vous êtes habitués.
124                Bizarrement JUnit re-instancie le scénario de test
125                pour chaque méthode de test pour se prévenir
126                d'une telle interférence.
127                SimpleTest demande à l'utilisateur final d'utiliser
128                <span class="new_code">setUp()</span>, mais fournit aux codeurs de bibliothÚque d'autres crochets.
129            </p>
130            <p>
131                Pour rapporter les résultats de test,
132                le passage par une classe d'affichage - notifiée par
133                les différentes méthodes de type <span class="new_code">assert...()</span> -
134                est utilisée. En voici la liste complÚte pour
135                la classe <span class="new_code">UnitTestCase</span>,
136                celle par défaut dans SimpleTest...
137            <table><tbody>
138                <tr>
139<td><span class="new_code">assertTrue($x)</span></td>
140<td>Echoue si $x est faux</td>
141</tr>
142                <tr>
143<td><span class="new_code">assertFalse($x)</span></td>
144<td>Echoue si $x est vrai</td>
145</tr>
146                <tr>
147<td><span class="new_code">assertNull($x)</span></td>
148<td>Echoue si $x est initialisé</td>
149</tr>
150                <tr>
151<td><span class="new_code">assertNotNull($x)</span></td>
152<td>Echoue si $x n'est pas initialisé</td>
153</tr>
154                <tr>
155<td><span class="new_code">assertIsA($x, $t)</span></td>
156<td>Echoue si $x n'est pas de la classe ou du type $t</td>
157</tr>
158                <tr>
159<td><span class="new_code">assertEqual($x, $y)</span></td>
160<td>Echoue si $x == $y est faux</td>
161</tr>
162                <tr>
163<td><span class="new_code">assertNotEqual($x, $y)</span></td>
164<td>Echoue si $x == $y est vrai</td>
165</tr>
166                <tr>
167<td><span class="new_code">assertIdentical($x, $y)</span></td>
168<td>Echoue si $x === $y est faux</td>
169</tr>
170                <tr>
171<td><span class="new_code">assertNotIdentical($x, $y)</span></td>
172<td>Echoue si $x === $y est vrai</td>
173</tr>
174                <tr>
175<td><span class="new_code">assertReference($x, $y)</span></td>
176<td>Echoue sauf si $x et $y sont la même variable</td>
177</tr>
178                <tr>
179<td><span class="new_code">assertCopy($x, $y)</span></td>
180<td>Echoue si $x et $y sont la même variable</td>
181</tr>
182                <tr>
183<td><span class="new_code">assertWantedPattern($p, $x)</span></td>
184<td>Echoue sauf si l'expression rationnelle $p capture $x</td>
185</tr>
186                <tr>
187<td><span class="new_code">assertNoUnwantedPattern($p, $x)</span></td>
188<td>Echoue si l'expression rationnelle $p capture $x</td>
189</tr>
190                <tr>
191<td><span class="new_code">assertNoErrors()</span></td>
192<td>Echoue si une erreur PHP arrive</td>
193</tr>
194                <tr>
195<td><span class="new_code">assertError($x)</span></td>
196<td>Echoue si aucune erreur ou message incorrect de PHP n'arrive</td>
197</tr>
198            </tbody></table>
199                Toutes les méthodes d'assertion peuvent recevoir
200                une description optionnelle :
201                cette description sert pour étiqueter le résultat.
202                Sans elle, une message par défaut est envoyée à la place :
203                il est généralement suffisant.
204                Ce message par défaut peut encore être encadré
205                dans votre propre message si vous incluez "%s"
206                dans la chaîne.
207                Toutes les assertions renvoient vrai / true en cas de succÚs
208                et faux / false en cas d'échec.
209            </p>
210            <p>
211                D'autres exemples...
212<pre>
213<strong>$variable = null;
214$this-&gt;assertNull($variable, 'Should be cleared');</strong>
215</pre>
216                ...passera et normalement n'affichera aucun message.
217                Si vous avez <a href="http://www.lastcraft.com/display_subclass_tutorial.php">
218                configuré le testeur pour afficher aussi les succÚs</a>
219                alors le message sera affiché comme tel.
220<pre>
221<strong>$this-&gt;assertIdentical(0, false, 'Zero is not false [%s]');</strong>
222</pre>
223                Ceci échouera étant donné qu'il effectue une vérification
224                sur le type en plus d'une comparaison sur les deux valeurs.
225                La partie "%s" est remplacée par le message d'erreur
226                par défaut qui aurait été affiché si nous n'avions pas fourni le nÃŽtre.
227                Cela nous permet d'emboîter les messages de test.
228<pre>
229<strong>$a = 1;
230$b = $a;
231$this-&gt;assertReference($a, $b);</strong>
232</pre>
233                Échouera étant donné que la variable <span class="new_code">$b</span>
234                est une copie de <span class="new_code">$a</span>.
235<pre>
236<strong>$this-&gt;assertWantedPattern('/hello/i', 'Hello world');</strong>
237</pre>
238                Là, ça passe puisque la recherche est insensible
239                à la casse et que donc <span class="new_code">hello</span>
240                est bien repérable dans <span class="new_code">Hello world</span>.
241<pre>
242<strong>trigger_error('Disaster');
243trigger_error('Catastrophe');
244$this-&gt;assertError();
245$this-&gt;assertError('Catastrophe');
246$this-&gt;assertNoErrors();</strong>
247</pre>
248                Ici, il y a besoin d'une petite explication :
249                toutes passent !
250            </p>
251            <p>
252                Les erreurs PHP dans SimpleTest sont piégées et
253                placées dans une queue. Ici la premiÚre vérification
254                d'erreur attrape le message "Disaster"
255                sans vérifier le texte et passe. Résultat :
256                l'erreur est supprimée de la queue.
257                La vérification suivante teste non seulement l'existence
258                de l'erreur mais aussi le texte qui correspond :
259                un autre succÚs. Désormais la queue est vide
260                et le dernier test passe aussi.
261                Si une autre erreur non vérifiée est encore
262                dans la queue à la fin de notre méthode de test
263                alors une exception sera rapportée dans le test.
264                Notez que SimpleTest ne peut pas attraper les erreurs PHP à la compilation.
265            </p>
266            <p>
267                Les scénarios de test peuvent utiliser des méthodes
268                bien pratiques pour déboguer le code ou pour étendre la suite...
269                <table><tbody>
270                    <tr>
271<td><span class="new_code">setUp()</span></td>
272<td>Est lancée avant chaque méthode de test</td>
273</tr>
274                    <tr>
275<td><span class="new_code">tearDown()</span></td>
276<td>Est lancée aprÚs chaque méthode de test</td>
277</tr>
278                    <tr>
279<td><span class="new_code">pass()</span></td>
280<td>Envoie un succÚs</td>
281</tr>
282                    <tr>
283<td><span class="new_code">fail()</span></td>
284<td>Envoie un échec</td>
285</tr>
286                    <tr>
287<td><span class="new_code">error()</span></td>
288<td>Envoi un évÚnement exception</td>
289</tr>
290                    <tr>
291<td><span class="new_code">sendMessage()</span></td>
292<td>Envoie un message d'état aux systÚmes d'affichage qui le supporte</td>
293</tr>
294                    <tr>
295<td><span class="new_code">signal($type, $payload)</span></td>
296<td>Envoie un message défini par l'utilisateur au rapporteur du test</td>
297</tr>
298                    <tr>
299<td><span class="new_code">dump($var)</span></td>
300<td>Effectue un <span class="new_code">print_r()</span> formaté pour du déboguage rapide et grossier</td>
301</tr>
302                    <tr>
303<td><span class="new_code">swallowErrors()</span></td>
304<td>Vide les erreurs de la queue</td>
305</tr>
306                </tbody></table>
307            </p>
308       
309        <p><a class="target" name="extension_unitaire"><h2>Etendre les scénarios de test</h2></a></p>
310            <p>
311                Bien sûr des méthodes supplémentaires de test
312                peuvent être ajoutées pour créer d'autres types
313                de scénario de test afin d'étendre le framework...
314<pre>
315require_once('simpletest/autorun.php');
316<strong>
317class FileTester extends UnitTestCase {
318    function FileTester($name = false) {
319        $this-&gt;UnitTestCase($name);
320    }
321   
322    function assertFileExists($filename, $message = '%s') {
323        $this-&gt;assertTrue(
324                file_exists($filename),
325                sprintf($message, 'File [$filename] existence check'));
326    }</strong>
327}
328</pre>
329                Ici la bibliothÚque SimpleTest est localisée
330                dans un répertoire local appelé <em>simpletest</em>.
331                Pensez à le modifier pour votre propre environnement.
332            </p>
333            <p>
334                Alternativement vous pourriez utiliser dans votre code
335                un directive <span class="new_code">SimpleTestOptions::ignore('FileTester');</span>.
336            </p>
337            <p>
338                Ce nouveau scénario peut être hérité exactement
339                comme un scénario de test classique...
340<pre>
341class FileTestCase extends <strong>FileTester</strong> {
342   
343    function setUp() {
344        @unlink('../temp/test.txt');
345    }
346   
347    function tearDown() {
348        @unlink('../temp/test.txt');
349    }
350   
351    function testCreation() {
352        $writer = &amp;new FileWriter('../temp/test.txt');
353        $writer-&gt;write('Hello');<strong>
354        $this-&gt;assertFileExists('../temp/test.txt');</strong>
355    }
356}
357</pre>
358            </p>
359            <p>
360                Si vous souhaitez un scénario de test sans
361                toutes les assertions de <span class="new_code">UnitTestCase</span>
362                mais uniquement avec les vÃŽtres propres,
363                vous aurez besoin d'étendre la classe
364                <span class="new_code">SimpleTestCase</span> Ã  la place.
365                Elle se trouve dans <em>simple_test.php</em>
366                en lieu et place de <em>unit_tester.php</em>.
367                A consulter <a href="group_test_documentation.html">plus tard</a>
368                si vous souhaitez incorporer les scénarios
369                d'autres testeurs unitaires dans votre suite de test.
370            </p>
371       
372        <p><a class="target" name="lancement_unitaire"><h2>Lancer un unique scénario de test</h2></a></p>
373            <p>
374                Ce n'est pas souvent qu'il faille lancer des scénarios
375                avec un unique test. Sauf lorsqu'il s'agit de s'arracher
376                les cheveux sur un module à problÚme sans pour
377                autant désorganiser la suite de test principale.
378                Avec <em>autorun</em> aucun échafaudage particulier
379                n'est nécessaire, il suffit de lancer votre test et
380                vous y êtes.
381            </p>
382            <p>
383                Vous pouvez même décider quel rapporteur
384                (par exemple, <span class="new_code">TextReporter</span> ou <span class="new_code">HtmlReporter</span>)
385                vous préférez pour un fichier spécifique quand il est lancé
386                tout seul...
387<pre>
388&lt;?php
389require_once('simpletest/autorun.php');<strong>
390SimpleTest :: prefer(new TextReporter());</strong>
391require_once('../classes/writer.php');
392
393class FileTestCase extends UnitTestCase {
394    ...
395}
396?&gt;
397</pre>
398                Ce script sera lancé tel que mais il n'y aura
399                aucun succÚs ou échec avant que des méthodes de test soient ajoutées.
400            </p>
401       
402    </div>
403        References and related information...
404        <ul>
405<li>
406            La page de SimpleTest sur
407            <a href="http://sourceforge.net/projects/simpletest/">SourceForge</a>.
408        </li>
409<li>
410            La page de téléchargement de SimpleTest sur
411            <a href="http://www.lastcraft.com/simple_test.php">LastCraft</a>.
412        </li>
413<li>
414            <a href="http://simpletest.org/api/">L'API complÚte de SimpleTest</a>
415            à partir de PHPDoc.
416        </li>
417</ul>
418<div class="menu_back"><div class="menu">
419<a href="index.html">SimpleTest</a>
420                |
421                <a href="overview.html">Overview</a>
422                |
423                <a href="unit_test_documentation.html">Unit tester</a>
424                |
425                <a href="group_test_documentation.html">Group tests</a>
426                |
427                <a href="mock_objects_documentation.html">Mock objects</a>
428                |
429                <a href="partial_mocks_documentation.html">Partial mocks</a>
430                |
431                <a href="reporter_documentation.html">Reporting</a>
432                |
433                <a href="expectation_documentation.html">Expectations</a>
434                |
435                <a href="web_tester_documentation.html">Web tester</a>
436                |
437                <a href="form_testing_documentation.html">Testing forms</a>
438                |
439                <a href="authentication_documentation.html">Authentication</a>
440                |
441                <a href="browser_documentation.html">Scriptable browser</a>
442</div></div>
443<div class="copyright">
444            Copyright<br>Marcus Baker 2006
445        </div>
446</body>
447</html>
Note: See TracBrowser for help on using the repository browser.