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><?php |
---|
55 | require_once('../classes/io.php'); |
---|
56 | |
---|
57 | class FileTester extends UnitTestCase { |
---|
58 | ... |
---|
59 | } |
---|
60 | |
---|
61 | class SocketTester extends UnitTestCase { |
---|
62 | ... |
---|
63 | } |
---|
64 | ?></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 | <?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 | ?> |
---|
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 | <?php |
---|
109 | require_once('simpletest/unit_tester.php'); |
---|
110 | require_once('simpletest/reporter.php');<strong> |
---|
111 | require_once('file_test.php'); |
---|
112 | |
---|
113 | $test = &new GroupTest('All file tests'); |
---|
114 | $test->addTestCase(new FileTestCase()); |
---|
115 | $test->run(new HtmlReporter());</strong> |
---|
116 | ?> |
---|
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 | <?php |
---|
126 | require_once('simpletest/unit_tester.php'); |
---|
127 | require_once('simpletest/reporter.php'); |
---|
128 | require_once('file_test.php'); |
---|
129 | |
---|
130 | $test = &new GroupTest('All file tests');<strong> |
---|
131 | $test->addTestClass('FileTestCase');</strong> |
---|
132 | $test->run(new HtmlReporter()); |
---|
133 | ?> |
---|
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 | <?php |
---|
142 | require_once('simpletest/unit_tester.php'); |
---|
143 | require_once('simpletest/reporter.php'); |
---|
144 | |
---|
145 | $test = &new GroupTest('All file tests');<strong> |
---|
146 | $test->addTestFile('file_test.php');</strong> |
---|
147 | $test->run(new HtmlReporter()); |
---|
148 | ?> |
---|
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 | <?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->GroupTest('All file tests'); |
---|
203 | $this->addTestFile('file_test.php'); |
---|
204 | } |
---|
205 | }</strong> |
---|
206 | ?> |
---|
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 | <?php |
---|
216 | require_once('file_group_test.php'); |
---|
217 | <strong> |
---|
218 | $test = &new FileGroupTest(); |
---|
219 | $test->run(new HtmlReporter());</strong> |
---|
220 | ?> |
---|
221 | </pre> |
---|
222 | ...ou alors nous pouvons les grouper |
---|
223 | dans un groupe de tests encore plus grand... |
---|
224 | <pre> |
---|
225 | <?php |
---|
226 | require_once('file_group_test.php'); |
---|
227 | <strong> |
---|
228 | $test = &new BigGroupTest('Big group'); |
---|
229 | $test->addTestCase(new FileGroupTest()); |
---|
230 | $test->addTestCase(...); |
---|
231 | $test->run(new HtmlReporter());</strong> |
---|
232 | ?> |
---|
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 | <?php |
---|
240 | class FileGroupTest extends GroupTest { |
---|
241 | function FileGroupTest() { |
---|
242 | $this->GroupTest('All file tests'); |
---|
243 | $test->addTestFile('file_test.php'); |
---|
244 | } |
---|
245 | } |
---|
246 | <strong> |
---|
247 | if (! defined('RUNNER')) { |
---|
248 | define('RUNNER', true);</strong> |
---|
249 | $test = &new FileGroupTest(); |
---|
250 | $test->run(new HtmlReporter()); |
---|
251 | } |
---|
252 | ?> |
---|
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 | <?php |
---|
264 | define('RUNNER', true); |
---|
265 | |
---|
266 | require_once('file_group_test.php'); |
---|
267 | $test = &new BigGroupTest('Big group'); |
---|
268 | $test->addTestCase(new FileGroupTest()); |
---|
269 | $test->addTestCase(...); |
---|
270 | $test->run(new HtmlReporter()); |
---|
271 | ?> |
---|
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 | <?php |
---|
278 | define('RUNNER', true); |
---|
279 | |
---|
280 | $test = &new BigGroupTest('Big group');<strong> |
---|
281 | $test->addTestFile('file_group_test.php'); |
---|
282 | $test->addTestFile(...);</strong> |
---|
283 | $test->run(new HtmlReporter()); |
---|
284 | ?> |
---|
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->TestCase('Config file test'); |
---|
307 | } |
---|
308 | |
---|
309 | function testContents() { |
---|
310 | $config = new ConfigFile('test.conf'); |
---|
311 | $this->assertRegexp('/me/', $config->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 | <?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 = &new GroupTest('All file tests');<strong> |
---|
325 | $test->addTestFile('config_test.php');</strong> |
---|
326 | $test->run(new HtmlReporter()); |
---|
327 | ?> |
---|
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 | <?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 = &new GroupTest('All file tests');<strong> |
---|
339 | $test->addTestFile('some_pear_test_cases.php');</strong> |
---|
340 | $test->run(new HtmlReporter()); |
---|
341 | ?> |
---|
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> |
---|