4. Lancement des tests

4.1. Exécutable

atoum dispose d’un exécutable qui vous permet de lancer vos tests en ligne de commande.

4.1.1. Avec l’archive phar

Si vous utiliser l’archive phar, elle est déjà exécutable.

4.1.1.1. linux / mac

$ php path/to/atoum.phar

4.1.1.2. windows

C:\> X:\Path\To\php.exe X:\Path\To\atoum.phar

4.1.2. Avec les sources

Si vous utilisez les sources, l’exécutable se trouve dans path/to/atoum/bin.

4.1.2.1. linux / mac

$ php path/to/bin/atoum

# OU #

$ ./path/to/bin/atoum

4.1.2.2. windows

C:\> X:\Path\To\php.exe X:\Path\To\bin\atoum\bin

4.1.3. Exemples dans le reste de la documentation

Dans les exemples suivants, les commandes pour lancer les tests avec atoum seront écrites avec la forme suivante :

$ ./bin/atoum

C’est exactement la commande que vous pourriez utiliser si vous avez Composer sous Linux.

4.2. Fichiers à exécuter

4.2.1. For specific files

Pour lancer les tests d’un fichier, il vous suffit d’utiliser l’option -f ou –files.

$ ./bin/atoum -f tests/units/MyTest.php

4.2.2. Pour un dossier

Pour lancer les tests d’un répertoire, il vous suffit d’utiliser l’option -d ou –directories.

$ ./bin/atoum -d tests/units

Vous trouverez d’autres arguments dans la section approprié lié à la ligne de commande.

4.3. Filtres

Une fois que vous avez préciser à atoum les fichiers à exécuter, vous pouvez filtrer ce qui sera réellement exécuter.

4.3.1. Par espace de noms

Pour filtrer sur les espace de nom, par example exécuter le test seulement sur un espace de nom, il suffit d’utiliser l’option -ns or --namespaces.

$ ./bin/atoum -d tests/units -ns mageekguy\\atoum\\tests\\units\\asserters

Note

Il est important de doubler chaque backslash pour éviter qu’ils soient interprétés par le shell.

4.3.2. Une classe ou une méthode

Pour filtrer sur une classe ou une méthode, c’est-à-dire exécuter seulement des tests d’une classe ou une méthode, il suffit d’utiliser l’option -m ou --methods.

$ ./bin/atoum -d tests/units -m mageekguy\\atoum\\tests\\units\\asserters\\string::testContains

Note

Il est important de doubler chaque backslash pour éviter qu’ils soient interprétés par le shell.

Vous pouvez remplacer le nom de la classe ou de la méthode par * pour signifier tous.

$ ./bin/atoum -d tests/units -m mageekguy\\atoum\\tests\\units\\asserters\\string::*

En utilisant « * » au lieu d’un nom de classe signifie que vous pouvez filtrer par nom de la méthode.

$ ./bin/atoum -d tests/units -m *::testContains

4.3.3. Tags

Tout comme de nombreux outils, dont Behat, atoum vous permet de taguer vos tests unitaires et de n’exécuter que ceux ayant un ou plusieurs tags spécifiques.

Pour cela, il faut commencer par définir un ou plusieurs tags pour une ou plusieurs classes de tests unitaires.

Cela se fait très simplement grâce aux annotations et à la balise @tags :

<?php

namespace vendor\project\tests\units;

require_once __DIR__ . '/atoum.phar';

use mageekguy\atoum;

/**
 * @tags thisIsOneTag thisIsTwoTag thisIsThreeTag
 */
class foo extends atoum\test
{
    public function testBar()
    {
        // ...
    }
}

De la même manière, il est également possible de taguer les méthodes de test.

Note

Les tags définis au niveau d’une méthode prennent le pas sur ceux définis au niveau de la classe.

<?php

namespace vendor\project\tests\units;

require_once __DIR__ . '/atoum.phar';

use mageekguy\atoum;

class foo extends atoum\test
{
    /**
     * @tags thisIsOneMethodTag thisIsTwoMethodTag thisIsThreeMethodTag
     */
    public function testBar()
    {
        // ...
    }
}

Une fois les tags nécessaires définis, il n’y a plus qu’à exécuter les tests avec le ou les tags adéquates à l’aide de l’option --tags, ou -t dans sa version courte :

$ ./bin/atoum -d tests/units -t thisIsOneTag

Attention, cette instruction n’a de sens que s’il y a une ou plusieurs classes de tests unitaires et qu’au moins l’une d’entre elles porte le tag spécifié. Dans le cas contraire, aucun test ne sera exécuté.

Il est possible de définir plusieurs tags :

$ ./bin/atoum -d tests/units -t thisIsOneTag thisIsThreeTag

Dans ce dernier cas, les classes de tests ayant été tagués soit avec thisIsOneTag, soit avec thisIsThreeTag, seront les seules à être exécutées.