File: group_test_documentation.xml

package info (click to toggle)
postfixadmin 2.3.5-2%2Bdeb7u1
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 6,200 kB
  • sloc: php: 25,767; xml: 14,485; perl: 964; sh: 664; python: 169; makefile: 84
file content (255 lines) | stat: -rw-r--r-- 11,834 bytes parent folder | download | duplicates (2)
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>