69b9eb42e2
delete, select & insert upgraded More utility function (node to array, arrayToNode) XMLDB special move command PHP Unit Test
399 lines
16 KiB
HTML
399 lines
16 KiB
HTML
<html>
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
|
<title>Documentation SimpleTest : Grouper des tests</title>
|
|
<link rel="stylesheet" type="text/css" href="docs.css" title="Styles">
|
|
</head>
|
|
<body>
|
|
<div class="menu_back"><div class="menu">
|
|
<a href="index.html">SimpleTest</a>
|
|
|
|
|
<a href="overview.html">Overview</a>
|
|
|
|
|
<a href="unit_test_documentation.html">Unit tester</a>
|
|
|
|
|
<a href="group_test_documentation.html">Group tests</a>
|
|
|
|
|
<a href="mock_objects_documentation.html">Mock objects</a>
|
|
|
|
|
<a href="partial_mocks_documentation.html">Partial mocks</a>
|
|
|
|
|
<a href="reporter_documentation.html">Reporting</a>
|
|
|
|
|
<a href="expectation_documentation.html">Expectations</a>
|
|
|
|
|
<a href="web_tester_documentation.html">Web tester</a>
|
|
|
|
|
<a href="form_testing_documentation.html">Testing forms</a>
|
|
|
|
|
<a href="authentication_documentation.html">Authentication</a>
|
|
|
|
|
<a href="browser_documentation.html">Scriptable browser</a>
|
|
</div></div>
|
|
<h1>Documentation sur le groupement des tests</h1>
|
|
This page...
|
|
<ul>
|
|
<li>
|
|
Plusieurs approches pour <a href="#group">grouper des tests</a> ensemble.
|
|
</li>
|
|
<li>
|
|
Combiner des groupes des tests dans des
|
|
<a href="#plus-haut">groupes plus grands</a>.
|
|
</li>
|
|
<li>
|
|
Intégrer des <a href="#heritage">scénarios de test hérités</a>
|
|
d'un autre type de PHPUnit.
|
|
</li>
|
|
</ul>
|
|
<div class="content">
|
|
<p><a class="target" name="grouper"><h2>Grouper des tests</h2></a></p>
|
|
<p>
|
|
Pour lancer les scénarios de tests en tant que groupe,
|
|
ils devraient être placés dans des fichiers sans le code du lanceur...
|
|
<pre>
|
|
<strong><?php
|
|
require_once('../classes/io.php');
|
|
|
|
class FileTester extends UnitTestCase {
|
|
...
|
|
}
|
|
|
|
class SocketTester extends UnitTestCase {
|
|
...
|
|
}
|
|
?></strong>
|
|
</pre>
|
|
Autant de scénarios que nécessaires peuvent être
|
|
mis dans un fichier unique. Ils doivent contenir
|
|
tout le code nécessaire, entre autres la bibliothèque testée,
|
|
mais aucune des bibliothèques de SimpleTest.
|
|
</p>
|
|
<p>
|
|
Si vous avez étendu l'un ou l'autre des scénarios de test,
|
|
vous pouvez aussi les inclure.
|
|
<pre>
|
|
<?php
|
|
require_once('../classes/io.php');
|
|
<strong>
|
|
class MyFileTestCase extends UnitTestCase {
|
|
...
|
|
}
|
|
SimpleTestOptions::ignore('MyFileTestCase');</strong>
|
|
|
|
class FileTester extends MyFileTestCase {
|
|
...
|
|
}
|
|
|
|
class SocketTester extends UnitTestCase {
|
|
...
|
|
}
|
|
?>
|
|
</pre>
|
|
La classe <span class="new_code">FileTester</span> ne contient aucun test véritable,
|
|
il s'agit d'une classe de base pour d'autres scénarios de test.
|
|
Pour cette raison nous utilisons la directive
|
|
<span class="new_code">SimpleTestOptions::ignore()</span> 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 scénarios de test
|
|
est chargé (cf. ci-dessous).
|
|
Nous l'appelons <em>file_test.php</em>.
|
|
</p>
|
|
<p>
|
|
Ensuite nous créons un fichier de groupe de tests,
|
|
disons <em>group_test.php</em>.
|
|
Vous penserez à un nom plus convaincant, j'en suis sûr.
|
|
Nous lui ajoutons le fichier de test avec une méthode sans risque...
|
|
<pre>
|
|
<?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>
|
|
?>
|
|
</pre>
|
|
Ceci instancie le scénario de test avant que
|
|
la suite de test ne soit lancée.
|
|
Ça pourrait devenir assez onéreux avec
|
|
un grand nombre de scénarios de test :
|
|
il existe donc une autre méthode qui instancie
|
|
la classe uniquement quand elle devient nécessaire...
|
|
<pre>
|
|
<?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());
|
|
?>
|
|
</pre>
|
|
Le problème de cette technique est que pour
|
|
chaque scénario de test supplémentaire nous aurons à importer
|
|
(via <span class="new_code">require_once()</span>) le fichier de code de test
|
|
et à instancier manuellement chaque scénario de test.
|
|
Nous pouvons nous épargner beaucoup de dactylographie avec...
|
|
<pre>
|
|
<?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());
|
|
?>
|
|
</pre>
|
|
Voici ce qui vient de se passer :
|
|
la classe <span class="new_code">GroupTest</span> a réalisé le
|
|
<span class="new_code">require_once()</span> pour nous.
|
|
Ensuite elle vérifie si de nouvelles classes de scénario
|
|
de test ont été créées par ce nouveau fichier
|
|
et les ajoute automatiquement au groupe de tests.
|
|
Désormais 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 déjà avoir été analysé par PHP
|
|
et dans ce cas aucune classe ne sera ajoutée.
|
|
Pensez à bien vérifier que les scénarios de test
|
|
ne sont inclus que dans ce fichier et dans aucun autre
|
|
(Note : avec la nouvelle fonctionnalité <cite>autorun</cite>,
|
|
ce problème a maintenant été résolu).
|
|
</li>
|
|
<li>
|
|
Les nouvelles classes d'extension de scénario
|
|
de test qui sont incluses seront placées
|
|
dans le groupe de tests et exécutées par la même occasion.
|
|
Vous aurez à ajouter une directive
|
|
<span class="new_code">SimpleTestOptions::ignore()</span> pour ces classes
|
|
ou alors pensez à les ajouter avant la ligne
|
|
<span class="new_code">GroupTest::addTestFile()</span>.
|
|
</li>
|
|
</ol>
|
|
</p>
|
|
|
|
<p><a class="target" name="plus-haut"><h2>Groupements de plus haut niveau</h2></a></p>
|
|
<p>
|
|
La technique ci-dessus place tous les scénarios de test
|
|
dans un unique et grand groupe.
|
|
Sauf que pour des projets plus conséquents,
|
|
ce n'est probablement pas assez souple;
|
|
vous voudriez peut-être grouper les tests tout à fait différemment.
|
|
</p>
|
|
<p>
|
|
Pour obtenir un groupe de tests plus souple
|
|
nous pouvons sous classer <span class="new_code">GroupTest</span>
|
|
et ensuite l'instancier au cas par cas...
|
|
<pre>
|
|
<?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>
|
|
?>
|
|
</pre>
|
|
Ceci nomme le test dans le constructeur
|
|
et ensuite ajoute à la fois nos scénarios
|
|
de test et un unique groupe en dessous.
|
|
Bien sûr nous pouvons ajouter plus d'un groupe à cet instant.
|
|
Nous pouvons maintenant invoquer les tests
|
|
à partir d'un autre fichier d'exécution...
|
|
<pre>
|
|
<?php
|
|
require_once('file_group_test.php');
|
|
<strong>
|
|
$test = &new FileGroupTest();
|
|
$test->run(new HtmlReporter());</strong>
|
|
?>
|
|
</pre>
|
|
...ou alors nous pouvons les grouper
|
|
dans un groupe de tests encore plus grand...
|
|
<pre>
|
|
<?php
|
|
require_once('file_group_test.php');
|
|
<strong>
|
|
$test = &new BigGroupTest('Big group');
|
|
$test->addTestCase(new FileGroupTest());
|
|
$test->addTestCase(...);
|
|
$test->run(new HtmlReporter());</strong>
|
|
?>
|
|
</pre>
|
|
Si nous souhaitons lancer le groupe de tests original
|
|
sans utiliser ses petits fichiers d'exécution,
|
|
nous pouvons mettre le code du lanceur de test
|
|
derrière des barreaux quand nous créons chaque groupe.
|
|
<pre>
|
|
<?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());
|
|
}
|
|
?>
|
|
</pre>
|
|
Cette approche exige aux barrières d'être activées
|
|
à l'inclusion du fichier de groupe de tests,
|
|
mais c'est quand même moins de tracas que beaucoup
|
|
de fichiers de lancement éparpillés.
|
|
Reste à inclure des barreaux identiques
|
|
au niveau supérieur afin de s'assurer que
|
|
le <span class="new_code">run()</span> ne sera lancé qu'une seule fois
|
|
à partir du script de haut niveau qui l'a invoqué.
|
|
<pre>
|
|
<?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());
|
|
?>
|
|
</pre>
|
|
Comme les scénarios de test normaux,
|
|
un <span class="new_code">GroupTest</span> peut être chargé avec la méthode
|
|
<span class="new_code">GroupTest::addTestFile()</span>.
|
|
<pre>
|
|
<?php
|
|
define('RUNNER', true);
|
|
|
|
$test = &new BigGroupTest('Big group');<strong>
|
|
$test->addTestFile('file_group_test.php');
|
|
$test->addTestFile(...);</strong>
|
|
$test->run(new HtmlReporter());
|
|
?>
|
|
</pre>
|
|
</p>
|
|
|
|
<p><a class="target" name="heritage"><h2>Intégrer des scénarios de test hérités</h2></a></p>
|
|
<p>
|
|
Si vous avez déjà des tests unitaires pour votre code
|
|
ou alors si vous étendez des classes externes
|
|
qui ont déjà leurs propres tests, il y a peu de chances
|
|
pour que ceux-ci soient déjà au format SimpleTest.
|
|
Heureusement il est possible d'incorporer ces scénarios
|
|
de test en provenance d'autres testeurs unitaires
|
|
directement dans des groupes de test SimpleTest.
|
|
</p>
|
|
<p>
|
|
Par exemple, supposons que nous ayons
|
|
ce scénario de test prévu pour
|
|
<a href="http://sourceforge.net/projects/phpunit">PhpUnit</a>
|
|
dans le fichier <em>config_test.php</em>...
|
|
<pre>
|
|
<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>
|
|
</pre>
|
|
Le groupe de tests peut le reconnaître à partir
|
|
du moment où nous mettons l'adaptateur approprié
|
|
avant d'ajouter le fichier de test...
|
|
<pre>
|
|
<?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());
|
|
?>
|
|
</pre>
|
|
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>...
|
|
<pre>
|
|
<?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());
|
|
?>
|
|
</pre>
|
|
Les scénarios de test de PEAR peuvent être
|
|
librement mélangés avec ceux de SimpleTest
|
|
mais vous ne pouvez pas utiliser les assertions
|
|
de SimpleTest au sein des versions héritées
|
|
des scénarios de test. La raison ?
|
|
Une simple vérification que vous ne rendez pas
|
|
par accident vos scénarios de test complètement
|
|
dépendants de SimpleTest.
|
|
Peut-être que vous souhaitez publier
|
|
votre bibliothèque sur PEAR par exemple :
|
|
ça voudrait dire la livrer avec des scénarios de
|
|
test compatibles avec PEAR::PhpUnit.
|
|
</p>
|
|
|
|
</div>
|
|
References and related information...
|
|
<ul>
|
|
<li>
|
|
La page du projet SimpleTest sur
|
|
<a href="http://sourceforge.net/projects/simpletest/">SourceForge</a>.
|
|
</li>
|
|
<li>
|
|
La page de téléchargement de SimpleTest sur
|
|
<a href="http://www.lastcraft.com/simple_test.php">LastCraft</a>.
|
|
</li>
|
|
</ul>
|
|
<div class="menu_back"><div class="menu">
|
|
<a href="index.html">SimpleTest</a>
|
|
|
|
|
<a href="overview.html">Overview</a>
|
|
|
|
|
<a href="unit_test_documentation.html">Unit tester</a>
|
|
|
|
|
<a href="group_test_documentation.html">Group tests</a>
|
|
|
|
|
<a href="mock_objects_documentation.html">Mock objects</a>
|
|
|
|
|
<a href="partial_mocks_documentation.html">Partial mocks</a>
|
|
|
|
|
<a href="reporter_documentation.html">Reporting</a>
|
|
|
|
|
<a href="expectation_documentation.html">Expectations</a>
|
|
|
|
|
<a href="web_tester_documentation.html">Web tester</a>
|
|
|
|
|
<a href="form_testing_documentation.html">Testing forms</a>
|
|
|
|
|
<a href="authentication_documentation.html">Authentication</a>
|
|
|
|
|
<a href="browser_documentation.html">Scriptable browser</a>
|
|
</div></div>
|
|
<div class="copyright">
|
|
Copyright<br>Marcus Baker 2006
|
|
</div>
|
|
</body>
|
|
</html>
|