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">
8
<div class="menu_back"><div class="menu">
9
<a href="index.html">SimpleTest</a>
11
<a href="overview.html">Overview</a>
13
<a href="unit_test_documentation.html">Unit tester</a>
15
<a href="group_test_documentation.html">Group tests</a>
17
<a href="mock_objects_documentation.html">Mock objects</a>
19
<a href="partial_mocks_documentation.html">Partial mocks</a>
21
<a href="reporter_documentation.html">Reporting</a>
23
<a href="expectation_documentation.html">Expectations</a>
25
<a href="web_tester_documentation.html">Web tester</a>
27
<a href="form_testing_documentation.html">Testing forms</a>
29
<a href="authentication_documentation.html">Authentication</a>
31
<a href="browser_documentation.html">Scriptable browser</a>
33
<h1>Documentation sur le groupement des tests</h1>
37
Plusieurs approches pour <a href="#group">grouper des tests</a> ensemble.
40
Combiner des groupes des tests dans des
41
<a href="#plus-haut">groupes plus grands</a>.
44
Intégrer des <a href="#heritage">scénarios de test hérités</a>
45
d'un autre type de PHPUnit.
49
<p><a class="target" name="grouper"><h2>Grouper des tests</h2></a></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...
55
require_once('../classes/io.php');
57
class FileTester extends UnitTestCase {
61
class SocketTester extends UnitTestCase {
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.
72
Si vous avez étendu l'un ou l'autre des scénarios de test,
73
vous pouvez aussi les inclure.
76
require_once('../classes/io.php');
78
class MyFileTestCase extends UnitTestCase {
81
SimpleTestOptions::ignore('MyFileTestCase');</strong>
83
class FileTester extends MyFileTestCase {
87
class SocketTester extends UnitTestCase {
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>.
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...
109
require_once('simpletest/unit_tester.php');
110
require_once('simpletest/reporter.php');<strong>
111
require_once('file_test.php');
113
$test = &new GroupTest('All file tests');
114
$test->addTestCase(new FileTestCase());
115
$test->run(new HtmlReporter());</strong>
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...
126
require_once('simpletest/unit_tester.php');
127
require_once('simpletest/reporter.php');
128
require_once('file_test.php');
130
$test = &new GroupTest('All file tests');<strong>
131
$test->addTestClass('FileTestCase');</strong>
132
$test->run(new HtmlReporter());
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...
142
require_once('simpletest/unit_tester.php');
143
require_once('simpletest/reporter.php');
145
$test = &new GroupTest('All file tests');<strong>
146
$test->addTestFile('file_test.php');</strong>
147
$test->run(new HtmlReporter());
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.
160
Il y a deux choses qui peuvent planter
161
et qui demandent un minimum d'attention...
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).
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>.
183
<p><a class="target" name="plus-haut"><h2>Groupements de plus haut niveau</h2></a></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.
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...
197
require_once('simpletest/unit_tester.php');
198
require_once('simpletest/reporter.php');
200
class FileGroupTest extends GroupTest {
201
function FileGroupTest() {
202
$this->GroupTest('All file tests');
203
$this->addTestFile('file_test.php');
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...
216
require_once('file_group_test.php');
218
$test = &new FileGroupTest();
219
$test->run(new HtmlReporter());</strong>
222
...ou alors nous pouvons les grouper
223
dans un groupe de tests encore plus grand...
226
require_once('file_group_test.php');
228
$test = &new BigGroupTest('Big group');
229
$test->addTestCase(new FileGroupTest());
230
$test->addTestCase(...);
231
$test->run(new HtmlReporter());</strong>
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.
240
class FileGroupTest extends GroupTest {
241
function FileGroupTest() {
242
$this->GroupTest('All file tests');
243
$test->addTestFile('file_test.php');
247
if (! defined('RUNNER')) {
248
define('RUNNER', true);</strong>
249
$test = &new FileGroupTest();
250
$test->run(new HtmlReporter());
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é.
264
define('RUNNER', true);
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());
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>.
278
define('RUNNER', true);
280
$test = &new BigGroupTest('Big group');<strong>
281
$test->addTestFile('file_group_test.php');
282
$test->addTestFile(...);</strong>
283
$test->run(new HtmlReporter());
288
<p><a class="target" name="heritage"><h2>Intégrer des scénarios de test hérités</h2></a></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.
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>...
304
<strong>class ConfigFileTest extends TestCase {
305
function ConfigFileTest() {
306
$this->TestCase('Config file test');
309
function testContents() {
310
$config = new ConfigFile('test.conf');
311
$this->assertRegexp('/me/', $config->getValue('username'));
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...
320
require_once('simpletest/unit_tester.php');
321
require_once('simpletest/reporter.php');<strong>
322
require_once('simpletest/adapters/phpunit_test_case.php');</strong>
324
$test = &new GroupTest('All file tests');<strong>
325
$test->addTestFile('config_test.php');</strong>
326
$test->run(new HtmlReporter());
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>...
334
require_once('simpletest/unit_tester.php');
335
require_once('simpletest/reporter.php');<strong>
336
require_once('simpletest/adapters/pear_test_case.php');</strong>
338
$test = &new GroupTest('All file tests');<strong>
339
$test->addTestFile('some_pear_test_cases.php');</strong>
340
$test->run(new HtmlReporter());
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.
358
References and related information...
361
La page du projet SimpleTest sur
362
<a href="http://sourceforge.net/projects/simpletest/">SourceForge</a>.
365
La page de téléchargement de SimpleTest sur
366
<a href="http://www.lastcraft.com/simple_test.php">LastCraft</a>.
369
<div class="menu_back"><div class="menu">
370
<a href="index.html">SimpleTest</a>
372
<a href="overview.html">Overview</a>
374
<a href="unit_test_documentation.html">Unit tester</a>
376
<a href="group_test_documentation.html">Group tests</a>
378
<a href="mock_objects_documentation.html">Mock objects</a>
380
<a href="partial_mocks_documentation.html">Partial mocks</a>
382
<a href="reporter_documentation.html">Reporting</a>
384
<a href="expectation_documentation.html">Expectations</a>
386
<a href="web_tester_documentation.html">Web tester</a>
388
<a href="form_testing_documentation.html">Testing forms</a>
390
<a href="authentication_documentation.html">Authentication</a>
392
<a href="browser_documentation.html">Scriptable browser</a>
394
<div class="copyright">
395
Copyright<br>Marcus Baker 2006