|
From: <pp...@us...> - 2011-05-23 21:11:22
|
Revision: 2020
http://simpletest.svn.sourceforge.net/simpletest/?rev=2020&view=rev
Author: pp11
Date: 2011-05-23 21:11:15 +0000 (Mon, 23 May 2011)
Log Message:
-----------
Keeping the french docs in synch
Modified Paths:
--------------
simpletest/trunk/docs/source/fr/browser_documentation.xml
simpletest/trunk/docs/source/fr/download_website.xml
simpletest/trunk/docs/source/fr/extension_eclipse.xml
simpletest/trunk/docs/source/fr/first_test_tutorial.xml
Modified: simpletest/trunk/docs/source/fr/browser_documentation.xml
===================================================================
--- simpletest/trunk/docs/source/fr/browser_documentation.xml 2011-05-23 21:09:04 UTC (rev 2019)
+++ simpletest/trunk/docs/source/fr/browser_documentation.xml 2011-05-23 21:11:15 UTC (rev 2020)
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!-- $Id$ -->
<page title="Documentation sur le navigateur scriptable" here="Le navigateur scriptable">
- <synchronisation lang="en" version="1803" date="20/03/2008" maintainer="pp11" />
+ <synchronisation lang="en" version="2015" date="20/03/2008" maintainer="pp11" />
<long_title>Documentation SimpleTest : le composant de navigation web scriptable</long_title>
<content>
<introduction>
Modified: simpletest/trunk/docs/source/fr/download_website.xml
===================================================================
--- simpletest/trunk/docs/source/fr/download_website.xml 2011-05-23 21:09:04 UTC (rev 2019)
+++ simpletest/trunk/docs/source/fr/download_website.xml 2011-05-23 21:11:15 UTC (rev 2020)
@@ -1,14 +1,14 @@
<?xml version="1.0"?>
<!-- $Id$ -->
<page title="Télécharger SimpleTest" here="Télécharger SimpleTest">
- <synchronisation lang="en" version="2002" date="29/04/2011" maintainer="pp11" />
+ <synchronisation lang="en" version="2019" date="23/05/2011" maintainer="pp11" />
<long_title>Télécharger SimpleTest</long_title>
<content>
<section name="current-release" title="Version courante">
<p>
La version courante est :
- <a href="http://sourceforge.net/projects/simpletest/files/simpletest/simpletest_1.1/simpletest_1.1alpha2.tar.gz/download">
- SimpleTest v1.1alpha2</a>.
+ <a href="http://sourceforge.net/projects/simpletest/files/simpletest/simpletest_1.1/simpletest_1.1alpha3.tar.gz/download">
+ SimpleTest v1.1alpha3</a>.
</p>
<p>
Vous pouvez télécharger cette version depuis
Modified: simpletest/trunk/docs/source/fr/extension_eclipse.xml
===================================================================
--- simpletest/trunk/docs/source/fr/extension_eclipse.xml 2011-05-23 21:09:04 UTC (rev 2019)
+++ simpletest/trunk/docs/source/fr/extension_eclipse.xml 2011-05-23 21:11:15 UTC (rev 2020)
@@ -1,7 +1,7 @@
<?xml version="1.0"?>
<!-- $Id$ -->
<page title="Plugin Eclipse pour SimpleTest" here="Plugin Eclipse">
- <synchronisation lang="en" version="1878" date="2ç/04/2011" maintainer="pp11" />
+ <synchronisation lang="en" version="2015" date="23/05/2011" maintainer="pp11" />
<long_title>Documentation du plugin Eclipse pour SimpleTest</long_title>
<content>
<section name="compat" title="Compatibilité">
Modified: simpletest/trunk/docs/source/fr/first_test_tutorial.xml
===================================================================
--- simpletest/trunk/docs/source/fr/first_test_tutorial.xml 2011-05-23 21:09:04 UTC (rev 2019)
+++ simpletest/trunk/docs/source/fr/first_test_tutorial.xml 2011-05-23 21:11:15 UTC (rev 2020)
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!-- $Id$ -->
<page title="Cr\xE9er un nouveau de sc\xE9nario de test" here="Tutorial : les tests unitaires en PHP">
- <synchronisation lang="en" version="1687" date="20/03/2008" maintainer="pp11" />
+ <synchronisation lang="en" version="1954" date="25/05/2011" maintainer="pp11" />
<long_title>Tutorial sur les tests unitaires en PHP - Cr\xE9er un exemple de sc\xE9nario de test en PHP</long_title>
<content>
<introduction>
@@ -47,87 +47,70 @@
OK, commen\xE7ons par \xE9crire un test...
<php><![CDATA[
<strong><?php
- if (! defined('SIMPLE_TEST')) {
- define('SIMPLE_TEST', 'simpletest/');
+require_once(dirname(__FILE__) . '/simpletest/autorun.php');
+
+class TestOfLogging extends UnitTestCase {
+ function testFirstLogMessagesCreatesFileIfNonexistent() {
}
- require_once(SIMPLE_TEST . 'autorun.php');
-
- class TestOfLogging extends UnitTestCase {
- function testCreatingNewFile() {
- }
- }
-
- $test = &new TestOfLogging();
- $test->run(new HtmlReporter());
+}
?></strong>
]]></php>
Pas \xE0 pas, voici ce qu'il veut dire.
</p>
- <p>
- La constante <code>SIMPLE_TEST</code> contient
- le chemin vers les classes de Simple Test \xE0 partir de ce fichier.
- Les classes pourraient \xEAtre plac\xE9es dans le path
- du fichier <em>php.ini</em> mais si vous \xEAtes sur un serveur mutualis\xE9,
- vous n'y aurez probablement pas acc\xE8s.
- Pour que tout le monde soit content,
- le chemin est d\xE9clar\xE9 explicitement dans le script de test.
- Plus tard nous verrons comment tout finira au m\xEAme endroit.
+ <p>
+ Le code <code>dirname(__FILE__)</code> s'assure juste
+ que le chemin vers SimpleTest d\xE9pend bien du fichier courant.
</p>
- <p>
- Qu'est-ce donc que ce fichier <em>autorun.php</em> ?
- Les biblioth\xE8ques de SimpleTest sont une bo\xEEte \xE0 outil
- pour cr\xE9er votre propre suite de tests standardis\xE9s.
- Elles peuvent \xEAtre utilis\xE9es "telles que" sans probl\xE8me,
- mais sont constitu\xE9es par des composants qui doivent \xEAtre assembl\xE9s.
- <em>autorun.php</em> est un composant sp\xE9cial :
- il fournit les parties "testeur unitaire" et "affichage".
- Il attrape les classes de test et les lance automagiquement.
+ <p>
+ Et donc qu'est-ce que ce fichier <em>autorun.php</em> ?
+ Ce fichier fait ce qu'on attend de lui : il va charger
+ les m\xE9thodes de <code>UnitTestCase</code>.
+ Ensuite il collecte toutes les classes de test pr\xE9sentes
+ dans le fichier courant et il les lancement automagiquement.
+ Il y arrive en cr\xE9ant un point de sortie.
+ On verra tout \xE7a en d\xE9tail quand on voudra modifier l'affichage.
</p>
<p>
- Il est probable que vous en viendrez \xE0 \xE9crire votre propre affichage
- et ajouter cette version par d\xE9faut est optionnel.
- SimpleTest inclut une classe d'affichage utilisable - et basique -
- appel\xE9e <code>HtmlReporter</code>.
- Sur des tests, elle peut enregistrer d\xE9buts, fins, erreurs, succ\xE8s et \xE9chec.
- Elle affiche ces informations au plus vite, au cas o\xF9 le code
- du test fait planter le script et masque la source d'\xE9chec.
- </p>
- <p>
Les tests eux-m\xEAmes sont rassembl\xE9s dans une classe de sc\xE9nario de test.
Cette derni\xE8re est typiquement une extension de
la classe <code>UnitTestCase</code>.
- Quand le test est ex\xE9cut\xE9, elle cherche les m\xE9thodes
+ Quand le test est ex\xE9cut\xE9 par l'autorunner, elle cherche les m\xE9thodes
commen\xE7ant par "test" et les lancent.
+ Toutes ces m\xE9thodes seront ex\xE9cut\xE9es dans l'ordre
+ de leur d\xE9finition dans la classe.
+
Notre seule m\xE9thode de test pour l'instant est appell\xE9e
<code>testCreatingNewFile()</code> mais elle est encore vide.
</p>
+ <p>
+ Notre unique m\xE9thode test s'appelle
+ <code>testFirstLogMessagesCreatesFileIfNonexistent()</code>.
+ Et il n'y a rien dedans pour le moment.
+ </p>
<p>
- Une m\xE9thode vide ne fait rien. Nous avons besoin d'y placer du code.
- La classe <code>UnitTestCase</code> g\xE9n\xE8re des \xE9v\xE8nements
- de test \xE0 son ex\xE9cution :
- ces \xE9v\xE8nements sont envoy\xE9s vers un observateur.
+ Cette d\xE9finition d'une m\xE9thode vide ne fait rien toute seule.
+ Nous devons bien s\xFBr lui ajouter du code.
+ La classe <code>UnitTestCase</code>
+ va typiquement g\xE9n\xE9r\xE9 des \xE9v\xE8nements de test quand elle sera ex\xE9cut\xE9e
+ et ces \xE9v\xE8nements seront ensuite envoy\xE9s \xE0 un rapporteur / observateur
+ utilisant les m\xE9thodes h\xE9rit\xE9es de
+ <code>UnitTestCase</code>.
</p>
<p>
Et pour ajouter du code de test...
<php><![CDATA[
<?php
- if (! defined('SIMPLE_TEST')) {
- define('SIMPLE_TEST', 'simpletest/');
- }
- require_once(SIMPLE_TEST . 'autorun.php');
- require_once('../classes/log.php');</strong>
+require_once(dirname(__FILE__) . '/simpletest/autorun.php');
+require_once('../classes/log.php');</strong>
- class TestOfLogging extends UnitTestCase {
- function testCreatingNewFile() {<strong>
- @unlink('../temp/test.log');
- $log = new Log('../temp/test.log');
- $log->message('Should write this to a file');
- $this->assertTrue(file_exists('../temp/test.log'));</strong>
- }
+class TestOfLogging extends UnitTestCase {
+ function testFirstLogMessagesCreatesFileIfNonexistent() {<strong>
+ @unlink(dirname(__FILE__) . '/../temp/test.log');
+ $log = new Log(dirname(__FILE__) . '/../temp/test.log');
+ $log->message('Should write this to a file');
+ $this->assertTrue(file_exists(dirname(__FILE__) . '/../temp/test.log'));</strong>
}
-
- $test = &new TestOfLogging();
- $test->run(new HtmlReporter());
+}
?>
]]></php>
</p>
@@ -140,7 +123,15 @@
Parfois moins en utilisant des artefacts
de test que nous d\xE9couvrirons plus tard.
</p>
- <p>
+ <p>
+ Vous pourriez aussi vous dire que
+ <code>testFirstLogMessagesCreatesFileIfNonexistent</code>
+ est un nom de m\xE9thode fichtrement trop long.
+ D'ordinaire ce serait exact, mais ici c'est une bonne chose.
+ Nous n'aurons plus jamais \xE0 \xE9crire ce nom, et nous n'aurons
+ pas besoin non plus d'ajouter des commentaires ou des sp\xE9cifications.
+ </p>
+ <p>
Nous devons maintenant prendre nos premi\xE8res d\xE9cisions.
Notre fichier de test s'appelle <em>log_test.php</em>
(n'importe quel nom ferait l'affaire) :
@@ -180,23 +171,31 @@
ou un \xE9chec dans le cas contraire.
Nous pouvons avoir un ensemble d'assertions diff\xE9rentes
et encore plus si nous \xE9tendons
- nos sc\xE9narios de test classique. Voici la liste...
+ nos sc\xE9narios de test classique.
+ </p>
+ <p>Voici la liste...
<table><tbody>
<tr><td><code>assertTrue($x)</code></td><td>Echoue si $x est faux</td></tr>
<tr><td><code>assertFalse($x)</code></td><td>Echoue si $x est vrai</td></tr>
<tr><td><code>assertNull($x)</code></td><td>Echoue si $x est initialis\xE9</td></tr>
<tr><td><code>assertNotNull($x)</code></td><td>Echoue si $x n'est pas initialis\xE9</td></tr>
<tr><td><code>assertIsA($x, $t)</code></td><td>Echoue si $x n'est pas de la classe ou du type $t</td></tr>
+ <tr><td><code>assertNotA($x, $t)</code></td><td>Echoue sauf si $x n'est pas de la classe ou du type $t</td></tr>
<tr><td><code>assertEqual($x, $y)</code></td><td>Echoue si $x == $y est faux</td></tr>
<tr><td><code>assertNotEqual($x, $y)</code></td><td>Echoue si $x == $y est vrai</td></tr>
+ <tr><td><code>assertWithinMargin($x, $y, $margin)</code></td><td>Echoue sauf si $x et $y sont s\xE9par\xE9s par moins que $margin</td></tr>
+ <tr><td><code>assertOutsideMargin($x, $y, $margin)</code></td><td>Echoue sauf si $x et $y sont suffisamment diff\xE9rents</td></tr>
<tr><td><code>assertIdentical($x, $y)</code></td><td>Echoue si $x === $y est faux</td></tr>
<tr><td><code>assertNotIdentical($x, $y)</code></td><td>Echoue si $x === $y est vrai</td></tr>
<tr><td><code>assertReference($x, $y)</code></td><td>Echoue sauf si $x et $y sont la m\xEAme variable</td></tr>
<tr><td><code>assertCopy($x, $y)</code></td><td>Echoue si $x et $y sont la m\xEAme variable</td></tr>
- <tr><td><code>assertWantedPattern($p, $x)</code></td><td>Echoue sauf si l'expression rationnelle $p capture $x</td></tr>
- <tr><td><code>assertNoUnwantedPattern($p, $x)</code></td><td>Echoue si l'expression rationnelle $p capture $x</td></tr>
+ <tr><td><code>assertSame($x, $y)</code></td><td>Echoue sauf si $x et $y sont le m\xEAme objet</td></tr>
+ <tr><td><code>assertClone($x, $y)</code></td><td>Echoue sauf si $x et $y sont identiques, mais aussi des objets s\xE9par\xE9s</td></tr>
+ <tr><td><code>assertPattern($p, $x)</code></td><td>Echoue sauf si l'expression rationnelle $p capture $x</td></tr>
+ <tr><td><code>assertNoPattern($p, $x)</code></td><td>Echoue si l'expression rationnelle $p capture $x</td></tr>
<tr><td><code>assertNoErrors()</code></td><td>Echoue si une erreur PHP arrive</td></tr>
- <tr><td><code>assertError($x)</code></td><td>Echoue si aucune erreur ou message incorrect de PHP n'arrive</td></tr>
+ <tr><td><code>expectError($e)</code></td><td>D\xE9clenche un \xE9chec si cette erreur n'arrive pas avant la fin du test</td></tr>
+ <tr><td><code>expectException($e)</code></td><td>D\xE9clenche un \xE9chec si cette exception n'est pas lev\xE9 avant la fin du test</td></tr>
</tbody></table>
</p>
<p>
@@ -205,7 +204,7 @@
Qu'est-ce qui devrait arriver ?
Il devrait planter...
<div class="demo">
- <b>Fatal error</b>: Failed opening required '../classes/log.php' (include_path='') in <b>/home/marcus/projects/lastcraft/tutorial_tests/Log/tests/log_test.php</b> on line <b>7</b>
+ <b>Fatal error</b>: Failed opening required '../classes/log.php' (include_path='') in <b>/home/marcus/projects/lastcraft/tutorial_tests/Log/tests/log_test.php</b> on line <b>7</b>
</div>
La raison ? Nous n'avons pas encore cr\xE9\xE9 <em>log.php</em>.
</p>
@@ -228,19 +227,23 @@
et seulement ensuite le code qui passe ce test.
N'importe quel bout de code. Juste pour qu'il passe.
</p>
- <p>
+ <p>
Vous \xE9crivez un autre test et puis de nouveau du code qui passe.
Vous aurez alors un peu de duplication et g\xE9n\xE9ralement
- du code pas tr\xE8s propre. Vous remaniez (factorisez)
+ du code pas tr\xE8s propre. Vous remaniez (ou "factorisez")
ce code-l\xE0 en vous assurant que les tests continuent \xE0 passer :
vous ne pouvez rien casser.
Une fois que le code est le plus propre possible
vous \xEAtes pr\xEAt \xE0 ajouter des nouvelles fonctionnalit\xE9s.
Il suffit juste de rajouter des nouveaux tests et de recommencer
le cycle une nouvelle fois.
-
+ Votre fonctionnalit\xE9 se cr\xE9e en essayant de faire passer les tests
+ qui la d\xE9finissent.
</p>
<p>
+ Pensez-y comme d'une sp\xE9cification \xE9x\xE9cutable, cr\xE9\xE9e en continue.
+ </p>
+ <p>
Il s'agit d'une approche assez radicale et
j'ai parfois l'impression qu'elle est incompl\xE8te.
Mais il s'agit d'un moyen efficace pour expliquer
@@ -250,53 +253,51 @@
l'heure est venue d'\xE9crire du code dans <em>log.php</em>...
<php><![CDATA[
<strong><?php
-
- class Log {
+class Log {
+
+ function __construct($file_path) {
+ }
- function Log($file_path) {
- }
-
- function message($message) {
- }
+ function message($message) {
}
+}
?></strong>
]]></php>
Il s'agit l\xE0 du minimum que nous puissions
faire pour \xE9viter une erreur fatale de PHP.
Et maintenant la r\xE9ponse devient...
<div class="demo">
- <h1>testoflogging</h1>
- <span class="fail">Fail</span>: testcreatingnewfile->True assertion failed.<br />
+ <h1>TestOfLogging</h1>
+ <span class="fail">Fail</span>: testFirstLogMessagesCreatesFileIfNonexistent->True assertion failed.<br />
<div style="padding: 8px; margin-top: 1em; background-color: red; color: white;">1/1 test cases complete.
- <strong>0</strong> passes and <strong>1</strong> fails.</div>
+ <strong>0</strong> passes, <strong>1</strong> fails and <strong>0</strong> exceptions.</div>
</div>
- "testoflogging" a \xE9chou\xE9.
- Parmi les d\xE9fauts de PHP on trouve cette f\xE2cheuse tendance
- \xE0 transformer int\xE9rieurement les noms de classes
- et de m\xE9thodes en minuscules.
+ "TestOfLogging" a \xE9chou\xE9.
SimpleTest utilise ces noms par d\xE9faut pour d\xE9crire
les tests mais nous pouvons les remplacer par nos propres noms.
<php><![CDATA[
class TestOfLogging extends UnitTestCase {
- <strong>function TestOfLogging() {
- $this->UnitTestCase('Log class test');
+ <strong>function __construct() {
+ parent::__construct('Log test');
}</strong>
- function testCreatingNewFile() {
- @unlink('../temp/test.log');
- $log = new Log('../temp/test.log');
- $log->message('Should write this to a file');<strong>
- $this->assertTrue(file_exists('../temp/test.log'), 'File created');</strong>
+
+ function testFirstLogMessagesCreatesFileIfNonexistent() {<strong>
+ @unlink(dirname(__FILE__) . '/../temp/test.log');
+ $log = new Log(dirname(__FILE__) . '/../temp/test.log');
+ $log->message('Should write this to a file');
+ $this->assertTrue(file_exists(dirname(__FILE__) . '/../temp/test.log'));</strong>
}
}
]]></php>
Ce qui donne...
<div class="demo">
- <h1>Log class test</h1>
- <span class="fail">Fail</span>: testcreatingnewfile->File created.<br />
+ <h1>Log test</h1>
+ <span class="fail">Fail</span>: testFirstLogMessagesCreatesFileIfNonexistent->File created.<br />
<div style="padding: 8px; margin-top: 1em; background-color: red; color: white;">1/1 test cases complete.
- <strong>0</strong> passes and <strong>1</strong> fails.</div>
+ <strong>0</strong> passes, <strong>1</strong> fails and <strong>0</strong> exceptions.</div>
</div>
- Par contre pour le nom des m\xE9thodes il n'y a rien \xE0 faire, d\xE9sol\xE9.
+ Si vous voulez changer le nom du test, alors il faudra le faire en changeant
+ la sortie du rapporteur. Nous y reviendrons plus tard.
</p>
<p>
Les messages d'un test comme ceux-ci ressemblent
@@ -317,19 +318,19 @@
Nous n'allons pas aussi lentement donc...
<php><![CDATA[
<?php
- class Log {<strong>
- var $_file_path;</strong>
+class Log {<strong>
+ var $path;</strong>
- function Log($file_path) {<strong>
- $this->_file_path = $file_path;</strong>
- }
+ function __construct($path) {<strong>
+ $this->path = $path;</strong>
+ }
- function message($message) {<strong>
- $file = fopen($this->_file_path, 'a');
- fwrite($file, $message . "\n");
- fclose($file);</strong>
- }
+ function message($message) {<strong>
+ $file = fopen($this->path, 'a');
+ fwrite($file, $message . "\n");
+ fclose($file);</strong>
}
+}
?>
]]></php>
Au total, pas moins de 4 \xE9checs ont \xE9t\xE9 n\xE9cessaire
@@ -340,11 +341,13 @@
N'importe laquelle de ces erreurs aurait pu m'occuper
pendant plusieurs heures si elle \xE9tait apparue plus tard
mais c'est bien pour ces cas l\xE0 qu'on teste.
+ </p>
+ <p>
Avec les corrections ad\xE9quates, \xE7a donne...
<div class="demo">
- <h1>Log class test</h1>
+ <h1>Log test</h1>
<div style="padding: 8px; margin-top: 1em; background-color: green; color: white;">1/1 test cases complete.
- <strong>1</strong> passes and <strong>0</strong> fails.</div>
+ <strong>1</strong> passes, <strong>0</strong> fails and <strong>0</strong> exceptions.</div>
</div>
\xC7a marche!
</p>
@@ -371,23 +374,21 @@
nous allons juste ajouter un test pour \xE7a.
<php><![CDATA[
class TestOfLogging extends UnitTestCase {
- function TestOfLogging() {
- $this->UnitTestCase('Log class test');
- }
- function testCreatingNewFile() {
- @unlink('../temp/test.log');
- $log = new Log('../temp/test.log');<strong>
- $this->assertFalse(file_exists('../temp/test.log'), 'No file created before first message');</strong>
+ function testFirstLogMessagesCreatesFileIfNonexistent() {
+ @unlink(dirname(__FILE__) . '/../temp/test.log');
+ $log = new Log(dirname(__FILE__) . '/../temp/test.log');<strong>
+ $this->assertFalse(file_exists(dirname(__FILE__) . '/../temp/test.log'));</strong>
$log->message('Should write this to a file');
- $this->assertTrue(file_exists('../temp/test.log'), 'File created');
+ $this->assertTrue(file_exists(dirname(__FILE__) . '/../temp/test.log'));
+
}
}
]]></php>
...et d\xE9couvrir que \xE7a marche d\xE9j\xE0...
<div class="demo">
- <h1>Log class test</h1>
+ <h1>TestOfLogging</h1>
<div style="padding: 8px; margin-top: 1em; background-color: green; color: white;">1/1 test cases complete.
- <strong>2</strong> passes and <strong>0</strong> fails.</div>
+ <strong>2</strong> passes, <strong>0</strong> fails and <strong>0</strong> exceptions.</div>
</div>
En fait je savais que \xE7a allait \xEAtre le cas.
J'ajoute ce test de confirmation tout d'abord pour
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|