Utiliser atoum avec Symfony 2 - tharkun/atoum GitHub Wiki

L'intégration d'atoum au sein d'un projet Symfony 2 se fait très simplement en quelques minutes.

Étape 1 : Installez atoum au sein de Symfony 2

Il suffit pour cela que vous téléchargiez son archive PHAR et la stockiez dans le répertoire vendor/ de Symfony 2.

Étape 2 : Créez le répertoire qui contiendra vos tests unitaires

Vos tests unitaires étant certainement en relation avec un Bundle, nommé par exemple aBundle il est logique de créer dans le répertoire de Symfony 2 les répertoires src\vendor\aBundle\Tests\Units.

Étape 3 : Créez votre classe de test unitaire de base

Par défaut, atoum demande que vos classes de tests unitaires soient dans un espace de noms contenant tests\units, afin de pouvoir déduire le nom de la classe testée.
Or, suivant les conventions de codage de Symfony 2, vos classes de tests unitaires devraient se trouver dans un espace de noms contenant Tests\Units.
Il faut donc dériver la classe de test unitaire de base d'atoum afin de suivre cette règle.
De plus, il est nécessaire de mettre en place l'auto-chargement de classes de Symfony 2 afin que vous n'ayez pas besoin d'inclure manuellement les fichiers contenant les classes testées. Pour faire cela, il suffit de créer dans le répertoire src\vendor\aBundle\Tests\Units créé précédement un fichier nommé Test.php contenant le code suivant :

<?php

namespace vendor\aBundle\Tests\Units;

require_once __DIR__ . '/../../../../../vendor/symfony/src/Symfony/Component/ClassLoader/UniversalClassLoader.php';

$loader = new \Symfony\Component\ClassLoader\UniversalClassLoader();

$loader->registerNamespaces(
   array(
     'Symfony' => __DIR__.'/../../../../../vendor/symfony/src',
     'vendor\aBundle' => __DIR__ . '/../../../../../src'
   )
);

$loader->register();

use mageekguy\atoum;

require_once __DIR__ . '/../../../../../vendor/mageekguy.atoum.phar';

abstract class Test extends atoum\test
{
   public function __construct(score $score = null, locale $locale = null, adapter $adapter = null)
   {
      $this->setTestsSubNamespace('Tests\Units');

      parent::__construct($score, $locale, $adapter);
   }
}

?>

Évidemment, il faut remplacer dans le code ci-dessus l'espace de noms vendor\aBundle par l'espace de noms de votre Bundle.

Étape 4 : Créez votre classe de tests unitaires

Vous disposez maintenant de tout ce qu'il faut pour créer votre première classe de tests unitaires au sein d'un projet utilisant Symfony 2.
Il vous suffit maintenant de vous rendre dans le répertoire src\vendor\aBundle\Tests\Units et de créer le répertoire correspondant à la nature ce ce que vous voulez tester, par exemple Command si vous souhaiter tester la classe vendor\aBundle\Command\FooCommand.
Ensuite, il ne reste plus qu'à créer dans ce répertoire le fichier FooCommand.php et d'y mettre le code suivante :

<?php

namespace vendor\aBundle\Tests\Units\Command;

require_once '../Test.php';

use vendor\aBundle\Tests\Units;

class ClearCacheCommand extends Units\Test
{
   protected function testBar()
   {
   }
}

?>

Encore une fois, il faut remplacer dans le code ci-dessus l'espace de noms vendor\aBundle par l'espace de noms de votre Bundle.

Exécution des tests unitaires

Une fois vos tests écrits dans le fichier src\vendor\aBundle\Tests\Units\Command\FooCommand.php, il faut les exécuter.
Pour cela, il suffit d'exécuter en ligne de commande l'instruction suivante :

# php src\vendor\aBundle\Tests\Units\Command\FooCommand.php

Si vous êtes déjà dans le répertoire src\vendor\aBundle\Tests\Units\Command, vous pouvez également appeler directement le fichier FooCommand.php de la manière suivante :

# php FooCommand.php

Enfin, si vous souhaitez exécuter l'ensemble des tests du répertoire src\vendor\aBundle\Tests\Units, il suffit d'exécuter l'instruction suivante dans votre terminal à partir de la racine de Symfony 2 :

# php vendor/mageekguy.atoum.phar -d src\vendor\aBundle\Tests\units

Sauf mention contraire, le contenu de cette page est sous contrat Creative Commons BY-NC-ND