summaryrefslogtreecommitdiff
path: root/tests/UnitTests/simpletest/docs/fr/overview.html
blob: 3d6663a0a84747481ff74627feec34d06cf06c1c (plain)
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
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>
        Aper&ccedil;u et liste des fonctionnalit&eacute;s des testeurs unitaires PHP et web de SimpleTest PHP
    </title>
<link rel="stylesheet" type="text/css" href="docs.css" title="Styles">
</head>
<body>
<div class="menu_back">
<div class="menu">
<h2>
<a href="index.html">SimpleTest</a>
</h2>
<ul>
<li>
<a href="overview.html">Overview</a>
</li>
<li>
<a href="unit_test_documentation.html">Unit tester</a>
</li>
<li>
<a href="group_test_documentation.html">Group tests</a>
</li>
<li>
<a href="server_stubs_documentation.html">Server stubs</a>
</li>
<li>
<a href="mock_objects_documentation.html">Mock objects</a>
</li>
<li>
<a href="partial_mocks_documentation.html">Partial mocks</a>
</li>
<li>
<a href="reporter_documentation.html">Reporting</a>
</li>
<li>
<a href="expectation_documentation.html">Expectations</a>
</li>
<li>
<a href="web_tester_documentation.html">Web tester</a>
</li>
<li>
<a href="form_testing_documentation.html">Testing forms</a>
</li>
<li>
<a href="authentication_documentation.html">Authentication</a>
</li>
<li>
<a href="browser_documentation.html">Scriptable browser</a>
</li>
</ul>
</div>
</div>
<h1>Apercu de SimpleTest</h1>
<div class="content">
        <p>
<a class="target" name="resume">
<h2>Qu'est-ce que SimpleTest ?</h2>
</a>
</p>
            <p>
                Le coeur de SimpleTest est un framework de test construit autour de classes de sc&eacute;narios de test. Celles-ci sont &eacute;crites comme des extensions des classes premi&egrave;res de sc&eacute;narios de test, chacune &eacute;largie avec des m&eacute;thodes qui contiennent le code de test effectif. Les scripts de test de haut niveau invoque la m&eacute;thode <span class="new_code">run()</span> &agrave; chaque sc&eacute;nario de test successivement. Chaque m&eacute;thode de test est &eacute;crite pour appeler des assertions diverses que le d&eacute;veloppeur suppose &ecirc;tre vraies, <span class="new_code">assertEqual()</span> par exemple. Si l'assertion est correcte, alors un succ&egrave;s est exp&eacute;di&eacute; au rapporteur observant le test, mais toute erreur d&eacute;clenche une alerte et une description de la dissension.
            </p>
            <p>
                Un <a href="unit_test_documentation.html">sc&eacute;nario de test</a> ressemble &agrave;...
<pre>
class <strong>MyTestCase</strong> extends UnitTestCase {
    <strong>
    function testLog() {
        $log = &amp;new Log('my.log');
        $log-&gt;message('Hello');
        $this-&gt;assertTrue(file_exists('my.log'));
    }</strong>
}
</pre>
            </p>
            <p>
                Ces outils sont con&ccedil;us pour le d&eacute;veloppeur. Les tests sont &eacute;crits en PHP directement, plus ou moins simultan&eacute;ment avec la construction de l'application elle-m&ecirc;me. L'avantage d'utiliser PHP lui-m&ecirc;me comme langage de test est qu'il n'y a pas de nouveau langage &agrave; apprendre, les tests peuvent commencer directement et le d&eacute;veloppeur peut tester n'importe quelle partie du code. Plus simplement, toutes les parties qui peuvent &ecirc;tre acc&eacute;d&eacute;es par le code de l'application peuvent aussi &ecirc;tre acc&eacute;d&eacute;es par le code de test si ils sont tous les deux dans le m&ecirc;me langage.
            </p>
            <p>
                Le type de sc&eacute;nario de test le plus simple est le <span class="new_code">UnitTestCase</span>. Cette classe de sc&eacute;nario de test inclut les tests standards pour l'&eacute;galit&eacute;, les r&eacute;f&eacute;rences et l'appariement de motifs (via les expressions rationnelles). Ceux-ci testent ce que vous seriez en droit d'attendre du r&eacute;sultat d'une fonction ou d'une m&eacute;thode. Il s'agit du type de test le plus commun pendant le quotidien du d&eacute;veloppeur, peut-&ecirc;tre 95% des sc&eacute;narios de test.
            </p>
            <p>
                La t&acirc;che ultime d'une application web n'est cependant pas de produire une sortie correcte &agrave; partir de m&eacute;thodes ou d'objets, mais plut&ocirc;t de produire des pages web. La classe <span class="new_code">WebTestCase</span> teste des pages web. Elle simule un navigateur web demandant une page, de fa&ccedil;on exhaustive : cookies, proxies, connexions s&eacute;curis&eacute;es, authentification, formulaires, cadres et la plupart des &eacute;l&eacute;ments de navigation. Avec ce type de sc&eacute;nario de test, le d&eacute;veloppeur peut garantir que telle ou telle information est pr&eacute;sente dans la page et que les formulaires ainsi que les sessions sont g&eacute;r&eacute;s comme il faut.
            </p>
            <p>
                Un <a href="web_tester_documentation.html">sc&eacute;nario de test web</a> ressemble &agrave;...
<pre>
class <strong>MySiteTest</strong> extends WebTestCase {
    <strong>
    function testHomePage() {
        $this-&gt;get('http://www.my-site.com/index.php');
        $this-&gt;assertTitle('My Home Page');
        $this-&gt;clickLink('Contact');
        $this-&gt;assertTitle('Contact me');
        $this-&gt;assertWantedPattern('/Email me at/');
    }</strong>
}
</pre>
            </p>
        
        <p>
<a class="target" name="fonctionnalites">
<h2>Liste des fonctionnalites</h2>
</a>
</p>
            <p>
                Ci-dessous vous trouverez un canevas assez brut des fonctionnalit&eacute;s &agrave; aujourd'hui et pour demain, sans oublier leur date approximative de publication. J'ai bien peur qu'il soit modifiable sans pr&eacute;-avis &eacute;tant donn&eacute; que les jalons d&eacute;pendent beaucoup sur le temps disponible. Les trucs en vert ont &eacute;t&eacute; cod&eacute;s, mais pas forc&eacute;ment d&eacute;j&agrave; rendus public. Si vous avez une besoin pressant pour une fonctionnalit&eacute; verte mais pas encore publique alors vous devriez retirer le code directement sur le  CVS chez SourceFourge. Une fonctionnalit&eacute;e publi&eacute;e est indiqu&eacute; par "Fini".
                <table>
<thead>
                    <tr>
<th>Fonctionnalit&eacute;</th><th>Description</th><th>Publication</th>
</tr>
                    </thead>
<tbody>
<tr>
                        <td>Sc&eacute;nariot de test unitaire</td>
                        <td>Les classes de test et assertions de base</td>
                        <td style="color: green;">Fini</td>
                    </tr>
                    <tr>
                        <td>Affichage HTML</td>
                        <td>L'affichage le plus simple possible</td>
                        <td style="color: green;">Fini</td>
                    </tr>
                    <tr>
                        <td>Autochargement des sc&eacute;narios de test</td>
                        <td>Lire un fichier avec des sc&eacute;narios de test et les charger dans un groupe de test automatiquement</td>
                        <td style="color: green;">Fini</td>
                    </tr>
                    <tr>
                        <td>G&eacute;n&eacute;rateur de code d'objets fantaisie</td>
                        <td>Des objets capable de simuler d'autres objets, supprimant les d&eacute;pendances dans les tests</td>
                        <td style="color: green;">Fini</td>
                    </tr>
                    <tr>
                        <td>Bouchons serveur</td>
                        <td>Des objets fantaisie sans r&eacute;sultat attendu &agrave; utiliser &agrave; l'ext&eacute;rieur des sc&eacute;narios de test, pour le prototypage par exemple.</td>
                        <td style="color: green;">Fini</td>
                    </tr>
                    <tr>
                        <td>Int&eacute;gration d'autres testeurs unitaires</td>
                        <td>
                            La capacit&eacute; de lire et simuler d'autres sc&eacute;narios de test en provenance de PHPUnit et de PEAR::Phpunit.</td>
                        <td style="color: green;">Fini</td>
                    </tr>
                    <tr>
                        <td>Sc&eacute;nario de test web</td>
                        <td>Appariement basique de motifs dans une page t&eacute;l&eacute;charg&eacute;e.</td>
                        <td style="color: green;">Fini</td>
                    </tr>
                    <tr>
                        <td>Analyse de page HTML</td>
                        <td>Permet de suivre les liens et de trouver la balise de titre</td>
                        <td style="color: green;">Fini</td>
                    </tr>
                    <tr>
                        <td>Simulacre partiel</td>
                        <td>Simuler des parties d'une classe pour tester moins qu'une classe ou dans des cas complexes.</td>
                        <td style="color: green;">Fini</td>
                    </tr>
                    <tr>
                        <td>Gestion des cookies Web</td>
                        <td>Gestion correcte des cookies au t&eacute;l&eacute;chargement d'une page.</td>
                        <td style="color: green;">Fini</td>
                    </tr>
                    <tr>
                        <td>Suivi des redirections</td>
                        <td>Le t&eacute;l&eacute;chargement d'une page suit automatiquement une redirection 300.</td>
                        <td style="color: green;">Fini</td>
                    </tr>
                    <tr>
                        <td>Analyse d'un formulaire</td>
                        <td>La capacit&eacute; de valider un formulaire simple et d'en lire les valeurs par d&eacute;faut.</td>
                        <td style="color: green;">Fini</td>
                    </tr>
                    <tr>
                        <td>Interface en ligne de commande</td>
                        <td>Affiche le r&eacute;sultat des tests sans navigateur web.</td>
                        <td style="color: green;">Fini</td>
                    </tr>
                    <tr>
                        <td>Mise &agrave; nu des attentes d'une classe</td>
                        <td>Peut cr&eacute;er des tests pr&eacute;cis avec des simulacres ainsi que des sc&eacute;narios de test.</td>
                        <td style="color: green;">Fini</td>
                    </tr>
                    <tr>
                        <td>Sortie et analyse XML</td>
                        <td>Permet de tester sur plusieurs h&ocirc;tes et d'int&eacute;grer des extensions d'acceptation de test.</td>
                        <td style="color: green;">Fini</td>
                    </tr>
                    <tr>
                        <td>Sc&eacute;nario de test en ligne de commande</td>
                        <td>Permet de tester des outils ou scripts en ligne de commande et de manier des fichiers.</td>
                        <td style="color: green;">Fini</td>
                    </tr>
                    <tr>
                        <td>Compatibilit&eacute; avec PHP Documentor</td>
                        <td>G&eacute;n&eacute;ration automatique et compl&egrave;te de la documentation au niveau des classes.</td>
                        <td style="color: green;">Fini</td>
                    </tr>
                    <tr>
                        <td>Interface navigateur</td>
                        <td>Mise &agrave; nu des niveaux bas de l'interface du navigateur web pour des sc&eacute;narios de test plus pr&eacute;cis.</td>
                        <td style="color: green;">Fini</td>
                    </tr>
                    <tr>
                        <td>Authentification HTTP</td>
                        <td>T&eacute;l&eacute;chargement des pages web prot&eacute;g&eacute;es avec une authentification basique seulement.</td>
                        <td style="color: green;">Fini</td>
                    </tr>
                    <tr>
                        <td>Boutons de navigation d'un navigateur</td>
                        <td>Arri&egrave;re, avant et recommencer</td>
                        <td style="color: green;">Fini</td>
                    </tr>
                    <tr>
                        <td>Support de SSL</td>
                        <td>Peut se connecter &agrave; des pages de type https.</td>
                        <td style="color: green;">Fini</td>
                    </tr>
                    <tr>
                        <td>Support de proxy</td>
                        <td>Peut se connecter via des proxys communs</td>
                        <td style="color: green;">Fini</td>
                    </tr>
                    <tr>
                        <td>Support des cadres</td>
                        <td>G&egrave;re les cadres dans les sc&eacute;narios de test web.</td>
                        <td style="color: green;">Fini</td>
                    </tr>
                    <tr>
                        <td>Am&eacute;lioration de l'affichage des tests</td>
                        <td>Une meilleure interface graphique web, avec un arbre des sc&eacute;narios de test.</td>
                        <td style="color: red;">1.1</td>
                    </tr>
                    <tr>
                        <td>Localisation</td>
                        <td>Abstraction des messages et g&eacute;nration du code &agrave; partir de fichiers XML.</td>
                        <td style="color: red;">1.1</td>
                    </tr>
                    <tr>
                        <td>Simulation d'interface</td>
                        <td>Peut g&eacute;n&eacute;rer des objets fantaisie tant vers des interfaces que vers des classes.</td>
                        <td style="color: red;">2.0</td>
                    </tr>
                    <tr>
                        <td>Test sur es exceptions</td>
                        <td>Dans le m&ecirc;me esprit que sur les tests des erreurs PHP.</td>
                        <td style="color: red;">2.0</td>
                    </tr>
                    <tr>
                        <td>Rercherche d'&eacute;l&eacute;ments avec XPath</td>
                        <td>Peut utiliser Tidy HTML pour un appariement plus rapide et plus souple.</td>
                        <td style="color: red;">2.0</td>
                    </tr>
                    <tr>
                        <td>Test de l'upload de fichier</td>
                        <td>Peut simuler la balise input de type file</td>
                        <td style="color: red;">2.0</td>
                    </tr>
                </tbody>
</table>
                La migration vers PHP5 commencera juste apr&egrave;s la s&eacute;rie des 1.0, &agrave; partir de l&agrave; PHP4 ne sera plus support&eacute;. SimpleTest est actuellement compatible avec PHP5 mais n'utilisera aucune des nouvelles fonctionnalit&eacute;s avant la version 2.
            </p>
        
        <p>
<a class="target" name="ressources">
<h2>Ressources sur le web pour les tests</h2>
</a>
</p>
            <p>
                Le processus est au moins aussi important que les outils. Le type de proc&eacute;dure que fait un usage le plus intensif des outils de test pour d&eacute;veloppeur est bien s&ucirc;r l'<a href="http://www.extremeprogramming.org/">Extreme Programming</a>. Il s'agit l&agrave; d'une des <a href="http://www.agilealliance.com/articles/index">m&eacute;thodes agiles</a> qui combinent plusieurs pratiques pour "lisser la courbe de co&ucirc;t" du d&eacute;veloppement logiciel. La plus extr&egrave;me reste le <a href="http://www.testdriven.com/modules/news/">d&eacute;veloppement pilot&eacute; par les tests</a>, o&ugrave; vous devez adh&eacute;rer &agrave; la r&egrave;gle du <cite>pas de code avant d'avoir un test</cite>. Si vous &ecirc;tes plut&ocirc;t du genre planninficateur ou que vous estimez que l'exp&eacute;rience compte plus que l'&eacute;volution, vous pr&eacute;f&eacute;rerez peut-&ecirc;tre l'approche <a href="http://www.therationaledge.com/content/dec_01/f_spiritOfTheRUP_pk.html">RUP</a>. Je ne l'ai pas test&eacute; mais je peux voir o&ugrave; vous aurez besoin d'outils de test (cf. illustration 9).
            </p>
            <p>
                La plupart des testeurs unitaires sont dans une certaine mesure un clone de <a href="http://www.junit.org/">JUnit</a>, au moins dans l'interface. Il y a &eacute;norm&eacute;ment d'information sur le site de JUnit, &agrave; commencer par la <a href="http://junit.sourceforge.net/doc/faq/faq.htm">FAQ</a> quie contient pas mal de conseils g&eacute;n&eacute;raux sur les tests. Une fois mordu par le bogue vous appr&eacute;cierez s&ucirc;rement la phrase <a href="http://junit.sourceforge.net/doc/testinfected/testing.htm">infect&eacute; par les tests</a> trouv&eacute;e par Eric Gamma. Si vous &ecirc;tes encore en train de tergiverser sur un testeur unitaire, sachez que les choix principaux sont <a href="http://phpunit.sourceforge.net/">PHPUnit</a> et <a href="http://pear.php.net/manual/en/package.php.phpunit.php">Pear PHP::PHPUnit</a>. De nombreuses fonctionnalit&eacute;s de SimpleTest leurs font d&eacute;faut, mais la version PEAR a d'ores et d&eacute;j&agrave; &eacute;t&eacute; mise &agrave; jour pour PHP5. Elle est aussi recommand&eacute;e si vous portez des sc&eacute;narios de test existant depuis <a href="http://www.junit.org/">JUnit</a>.
            </p>
            <p>
                Les d&eacute;veloppeurs de biblioth&egrave;que n'ont pas l'air de livrer tr&egrave;s souvent des tests avec leur code : c'est bien dommage. Le code d'une biblioth&egrave;que qui inclut des tests peut &ecirc;tre remani&eacute; avec plus de s&eacute;curit&eacute; et le code de test sert de documentation additionnelle dans un format assez standard. Ceci peut &eacute;pargner la p&ecirc;che aux indices dans le code source lorsque qu'un probl&egrave;me survient, en particulier lors de la mise &agrave; jour d'une telle biblioth&egrave;que. Parmi les biblioth&egrave;ques utilisant SimpleTest comme testeur unitaire on retrouve <a href="http://wact.sourceforge.net/">WACT</a> et <a href="http://sourceforge.net/projects/htmlsax">PEAR::XML_HTMLSax</a>.
            </p>
            <p>
                Au jour d'aujourd'hui il manque tristement beaucoup de mati&egrave;re sur les objets fantaisie : dommage, surtout que tester unitairement sans eux repr&eacute;sente pas mal de travail en plus. L'<a href="http://www.sidewize.com/company/mockobjects.pdf">article original sur les objets fantaisie</a> est tr&egrave;s orient&eacute; Java, mais reste int&eacute;ressant &agrave; lire. Etant donn&eacute; qu'il s'agit d'une nouvelle technologie il y a beaucoup de discussions et de d&eacute;bats sur comment les utiliser, souvent sur des wikis comme <a href="http://xpdeveloper.com/cgi-bin/oldwiki.cgi?MockObjects">Extreme Tuesday</a> ou <a href="http://www.mockobjects.com/wiki/MocksObjectsPaper">www.mockobjects.com</a>ou <a href="http://c2.com/cgi/wiki?MockObject">the original C2 Wiki</a>. Injecter des objets fantaisie dans une classe est un des champs principaux du d&eacute;bat : cet <a href="http://www-106.ibm.com/developerworks/java/library/j-mocktest.html">article chez IBM</a> en est un bon point de d&eacute;part.
            </p>
            <p>
                Il y a &eacute;normement d'outils de test web mais la plupart sont &eacute;crits en Java. De plus les tutoriels et autres conseils sont plut&ocirc;t rares. Votre seul espoir est de regarder directement la documentation pour <a href="http://httpunit.sourceforge.net/">HTTPUnit</a>, <a href="http://htmlunit.sourceforge.net/">HTMLUnit</a> ou <a href="http://jwebunit.sourceforge.net/">JWebUnit</a> et d'esp&eacute;rer y trouver pour des indices. Il y a aussi des frameworks bas&eacute;s sur XML, mais de nouveau la plupart ont besoin de Java pour tourner.
            </p>
        
    </div>
<div class="copyright">
            Copyright<br>Marcus Baker, Jason Sweat, Perrick Penet 2004
        </div>
</body>
</html>