Prev Next

Annexe C. Le fichier de configuration Configuration

PHPUnit

Les attributs d'un élément <phpunit> peuvent être utilisés pour configurer les fonctionnalités du coeur de PHPUnit.

<phpunit backupGlobals="true"
         backupStaticAttributes="false"
         <!--bootstrap="/chemin/vers/amorce.php"-->
         cacheTokens="true"
         colors="false"
         convertErrorsToExceptions="true"
         convertNoticesToExceptions="true"
         convertWarningsToExceptions="true"
         forceCoversAnnotation="false"
         mapTestClassNameToCoveredClassName="false"
         printerClass="PHPUnit_TextUI_ResultPrinter"
         <!--printerFile="/chemin/vers/AfficheurResultat.php"-->
         processIsolation="false"
         stopOnError="false"
         stopOnFailure="false"
         stopOnIncomplete="false"
         stopOnSkipped="false"
         testSuiteLoaderClass="PHPUnit_Runner_StandardTestSuiteLoader"
         <!--testSuiteLoaderFile="/chemin/vers/ChargeurStandardDeSuiteDeTest.php"-->
         strict="false"
         verbose="false">
  <!-- ... -->
</phpunit>

Le fichier de configuration XML ci-dessus correspond au comportement par défaut du lanceur de tests TextUI documenté dans la section intitulée « Options de la ligne de commandes ».

Des options supplémentaires qui ne sont pas disponibles en tant qu'option de ligne de commandes sont :

convertNoticesToExceptions, convertWarningsToExceptions, convertErrorsToExceptions

Peuvent être utilisées pour désactiver la conversion automatique de toutes les erreurs, avertissement ou information de php en exception.

forceCoversAnnotation

La couverture de code ne sera enregistrée que pour les tests qui utilisent l'annotation @covers documentée dans la section intitulée « @covers ».

Série de tests

L'élément <testsuites> et son ou ses fils <testsuite> peuvent être utilisés pour composer une série de tests à partir des séries de test et des cas de test.

<testsuites>
  <testsuite name="Ma suite de tests">
    <directory>/chemin/vers/fichiers *Test.php</directory>
    <file>/chemin/vers/MonTest.php</file>
    <exclude>/chemin/a/exclure</exclude>
  </testsuite>
</testsuites>

En utilisant les attributs phpVersion et phpVersionOperator, une version requise de PHP peut être indiquée. L'exemple ci-dessous ne va ajouter que les fichiers /chemin/vers/*Test.php et /chemin/vers/MonTest.php si la version de PHP est au moins 5.3.0.

  <testsuites>
    <testsuite name="Ma suite de tests">
      <directory suffix="Test.php" phpVersion="5.3.0" phpVersionOperator=">=">/chemin/vers/fichiers</directory>
      <file phpVersion="5.3.0" phpVersionOperator=">=">/chemin/vers/MonTest.php</file>
    </testsuite>
  </testsuites>

L'attribut phpVersionOperator est facultatif et vaut par défaut >=.

Groupes

L'élément <groups> et ses fils <include>, <exclude> et <group> peuvent être utilisés pour choisir des groupes de tests depuis une série de tests qui doivent (ou ne doivent pas) être exécutés.

<groups>
  <include>
    <group>nom</group>
  </include>
  <exclude>
    <group>nom</group>
  </exclude>
</groups>

La configuration XML ci-dessus revient à appeler le lanceur de test TextUI avec les options suivantes:

  • --group nom

  • --exclude-group nom

Inclure et exclure des fichiers de la couverture de code

L'élément <filter> et ses fils peuvent être utilisés pour configurer les listes noires et les listes blanches pour les rapports de couverture de code.

<filter>
  <blacklist>
    <directory suffix=".php">/chemin/vers/fichiers</directory>
    <file>/chemin/vers/fichier</file>
    <exclude>
      <directory suffix=".php">/chemin/vers/fichiers</directory>
      <file>/chemin/vers/fichier</file>
    </exclude>
  </blacklist>
  <whitelist addUncoveredFilesFromWhitelist="true">
    <directory suffix=".php">/chemin/vers/fichiers</directory>
    <file>/chemin/vers/fichier</file>
    <exclude>
      <directory suffix=".php">/chemin/vers/fichiers</directory>
      <file>/chemin/vers/fichier</file>
    </exclude>
  </whitelist>
</filter>

Journalisation

L'élément <logging> et ses fils <log> peuvent être utilisés pour configurer la journalisation de l'exécution des tests.

<logging>
  <log type="coverage-html" target="/tmp/report" charset="UTF-8"
       yui="true" highlight="false"
       lowUpperBound="35" highLowerBound="70"/>
  <log type="coverage-clover" target="/tmp/coverage.xml"/>
  <log type="coverage-php" target="/tmp/coverage.serialized"/>
  <log type="coverage-text" target="php://stdout" showUncoveredFiles="false"/>
  <log type="json" target="/tmp/logfile.json"/>
  <log type="tap" target="/tmp/logfile.tap"/>
  <log type="junit" target="/tmp/logfile.xml" logIncompleteSkipped="false"/>
  <log type="testdox-html" target="/tmp/testdox.html"/>
  <log type="testdox-text" target="/tmp/testdox.txt"/>
</logging>

La configuration XML ci-dessus revient à invoquer le lanceur de tests TextUI avec les options suivantes :

  • --coverage-html /tmp/report

  • --coverage-clover /tmp/coverage.xml

  • --coverage-php /tmp/coverage.serialized

  • --coverage-text

  • --log-json /tmp/logfile.json

  • > /tmp/logfile.txt

  • --log-tap /tmp/logfile.tap

  • --log-junit /tmp/logfile.xml

  • --testdox-html /tmp/testdox.html

  • --testdox-text /tmp/testdox.txt

Les attributs charset, yui, highlight, lowUpperBound, highLowerBound, logIncompleteSkipped and showUncoveredFiles n'ont pas d'options équivalentes pour le lanceur de tests TextUI.

  • charset: encodage de caractères à utiliser pour les pages html générées

  • yui: améliore le rapport de couverture html en utilisant la bibliothèque yui. Par exemple, lorsque vous cliquez sur un numéro de ligne, un panneau YUI apparaît avec une liste de toutes les méthodes qui couvrent cette ligne.

  • highlight: Quand mis à vrai, les rapports de couverture de code bénéficient de la coloration syntaxique.

  • lowUpperBound: pourcentage de couverture maximum considérée comme étant faible.

  • highLowerBound: pourcentage de couverture minimum considérée comme étant forte.

  • showUncoveredFiles: Montre tous les fichiers en liste blanche dans la sortie --coverage-text et pas seulement ceux possédant des informations de couverture.

Moniteurs de tests

L'élément <listeners> et ses fils <listener> peuvent être utilisés pour brancher des moniteurs de tests additionnels lors de l'exécution des tests.

<listeners>
  <listener class="MonMoniteur" file="/optionnel/chemin/vers/MonMoniteur.php">
    <arguments>
      <array>
        <element key="0">
          <string>Sebastian</string>
        </element>
      </array>
      <integer>22</integer>
      <string>April</string>
      <double>19.78</double>
      <null/>
      <object class="stdClass"/>
    </arguments>
  </listener>
</listeners>

La configuration XML ci-dessus revient à brancher l'objet $moniteur (voir ci-dessous) à l'exécution des tests :

$moniteur = new MonMoniteur(
  array('Sebastian'),
  22,
  'April',
  19.78,
  NULL,
  new stdClass
);

Configurer les réglages de PHP INI, les constantes et les variables globales

L'élément <php> et ses fils peuvent être utilisés pour configurer les réglages PHP, les constantes et les variables globales. Il peut également être utilisé pour préfixer l'include_path.

<php>
  <includePath>.</includePath>
  <ini name="foo" value="bar"/>
  <const name="foo" value="bar"/>
  <var name="foo" value="bar"/>
  <env name="foo" value="bar"/>
  <post name="foo" value="bar"/>
  <get name="foo" value="bar"/>
  <cookie name="foo" value="bar"/>
  <server name="foo" value="bar"/>
  <files name="foo" value="bar"/>
  <request name="foo" value="bar"/>
</php>

La configuration XML ci-dessus correspond au code PHP suivant :

ini_set('foo', 'bar');
define('foo', 'bar');
$GLOBALS['foo'] = 'bar';
$_ENV['foo'] = 'bar';
$_POST['foo'] = 'bar';
$_GET['foo'] = 'bar';
$_COOKIE['foo'] = 'bar';
$_SERVER['foo'] = 'bar';
$_FILES['foo'] = 'bar';
$_REQUEST['foo'] = 'bar';

Configurer les navigateurs pour Selenium RC

L'élément <selenium> et ses fils <browser> peuvent être utilisés pour configurer une liste de serveurs Selenium RC.

<selenium>
  <browser name="Firefox sur Linux"
           browser="*firefox /usr/lib/firefox/firefox-bin"
           host="ma.box.linux"
           port="4444"
           timeout="30000"/>
</selenium>

La configuration XML ci-dessus correspond au code PHP suivant :

class WebTest extends PHPUnit_Extensions_SeleniumTestCase
{
    public static $browsers = array(
      array(
        'name'    => 'Firefox sur Linux',
        'browser' => '*firefox /usr/lib/firefox/firefox-bin',
        'host'    => 'ma.box.linux',
        'port'    => 4444,
        'timeout' => 30000
      )
    );

    // ...
}
Prev Next
1. Automatiser les tests
2. Objectifs de PHPUnit
3. Installer PHPUnit
4. Ecrire des tests pour PHPUnit
Dépendances des tests
Fournisseur de données
Tester des exceptions
Tester les erreurs PHP
Tester la sortie écran
Assertions
assertArrayHasKey()
assertClassHasAttribute()
assertClassHasStaticAttribute()
assertContains()
assertContainsOnly()
assertCount()
assertEmpty()
assertEqualXMLStructure()
assertEquals()
assertFalse()
assertFileEquals()
assertFileExists()
assertGreaterThan()
assertGreaterThanOrEqual()
assertInstanceOf()
assertInternalType()
assertLessThan()
assertLessThanOrEqual()
assertNull()
assertObjectHasAttribute()
assertRegExp()
assertStringMatchesFormat()
assertStringMatchesFormatFile()
assertSame()
assertSelectCount()
assertSelectEquals()
assertSelectRegExp()
assertStringEndsWith()
assertStringEqualsFile()
assertStringStartsWith()
assertTag()
assertThat()
assertTrue()
assertXmlFileEqualsXmlFile()
assertXmlStringEqualsXmlFile()
assertXmlStringEqualsXmlString()
5. Le lanceur de tests en ligne de commandes
Options de la ligne de commandes
6. Fixtures
Plus de setUp() que de tearDown()
Variantes
Partager les Fixtures
Etat global
7. Organiser les tests
Composer une suite de tests en utilisant le système de fichiers
Composer une suite de tests en utilisant la configuration XML
8. Tester des bases de données
Systèmes gérés pour tester des bases de données
Difficultés pour tester les bases de données
Les quatre phases d'un test de base de données
1. Nettoyer la base de données
2. Configurer les fixtures
3–5. Exécuter les tests, vérifier les résultats et nettoyer
Configuration d'un cas de test de base de données PHPUnit
Implémenter getConnection()
Implémenter getDataSet()
Qu'en est-il du schéma de base de données (DDL)?
Astuce: utilisez votre propre cas de tests abstrait de base de données
Comprendre DataSets et DataTables
Implémentations disponibles
Attention aux clefs étrangères
Implementer vos propres DataSets/DataTables
L'API de connexion
API d'assertion de base de données
Faire une assertion sur le nombre de lignes d'une table
Faire une assertion sur l'état d'une table
Faire une assertion sur le résultat d'une requête
Faire une assertion sur l'état de plusieurs tables
Foire aux questions
PHPUnit va-t'il (re-)créer le schéma de base de données pour chaque test ?
Suis-je obligé d'utiliser PDO dans mon application pour que l'extension de base de données fonctionne ?
Que puis-je faire quand j'obtiens une erreur « Too much Connections (Trop de connexions) » ?
Comment gérer les valeurs NULL avec les DataSets au format XML à plat / CSV ?
9. Tests incomplets et sautés
Tests incomplets
Sauter des tests
10. Doublure de test
Bouchons
Objets simulacres (Mock Objects)
Bouchon et simulacre pour Web Services
Simuler le système de fichiers
11. Pratiques de test
Pendant le développement
Pendant le débogage
12. Développement dirigé par les tests
Exemple du compte bancaire
13. Développement dirigé par le comportement
Exemple du jeu de Bowling
14. Analyse de couverture de code
Spécifier les méthodes couvertes
Ignorer des blocs de code
Inclure et exclure des fichiers
Cas limites
15. Autres utilisations des tests
Documentation agile
Tests transverses à l'équipe
16. Générateur de squelette
Générer un squelettre de classe de cas de test
Générer un squelette de classe à partir d'une classe de cas de test
17. PHPUnit et Selenium
Selenium Server
Installation
PHPUnit_Extensions_Selenium2TestCase
PHPUnit_Extensions_SeleniumTestCase
18. Journalisation
Résultats de test (XML)
Résultats de test (TAP)
Résultats de test (JSON)
Couverture de code (XML)
Couverture de code (TEXTE)
19. Etendre PHPUnit
Sous-classe PHPUnit_Framework_TestCase
Ecrire des assertions personnalisées
Implémenter PHPUnit_Framework_TestListener
Sous classer PHPUnit_Extensions_TestDecorator
Implémenter PHPUnit_Framework_Test
A. Assertions
B. Annotations
@assert
@author
@backupGlobals
@backupStaticAttributes
@codeCoverageIgnore*
@covers
@dataProvider
@depends
@expectedException
@expectedExceptionCode
@expectedExceptionMessage
@group
@outputBuffering
@runTestsInSeparateProcesses
@runInSeparateProcess
@test
@testdox
@ticket
C. Le fichier de configuration Configuration
PHPUnit
Série de tests
Groupes
Inclure et exclure des fichiers de la couverture de code
Journalisation
Moniteurs de tests
Configurer les réglages de PHP INI, les constantes et les variables globales
Configurer les navigateurs pour Selenium RC
D. Index
Index
E. Bibliographie
F. Copyright