Modifier l'espace de nom par défaut des tests unitaires - tharkun/atoum GitHub Wiki
Au début de l'exécution d'une classe de test, atoum recherche la classe testée.
Pour cela, par défaut, il supprime de l'espace de nommage de la classe de test la chaîne de caractères tests\units
.
Ainsi, si la classe de test porte le nom \vendor\project\tests\units\foo
, il supposera que la classe testée porte le nom \vendor\project\foo
.
Or, suivant les conventions de nommage adoptées, il est possible que ce comportement ne soit pas acceptable et il est donc nécessaire de le modifier.
Pour cela, il suffit de faire appel à la méthode \mageekguy\atoum\test::setTestNamespace() dans le constructeur de la classe de test, de la manière suivante :
<?php
namespace vendor\project\Tests\Units;
require_once __DIR__ . '/mageekguy.atoum.phar';
use mageekguy\atoum;
abstract class aClass extends atoum\test
{
public function __construct(score $score = null, locale $locale = null, adapter $adapter = null)
{
$this->setTestNamespace('Tests\Units');
parent::__construct($score, $locale, $adapter);
}
public function testBar()
{
/* ... */
}
}
?>
La méthode \mageekguy\atoum\test::setTestNamespace()
accepte en effet un unique argument, dont la valeur doit être la partie de l'espace de nommage de votre projet qui est réservée aux tests unitaires de la classe testée.
Si vous réservez un espace de nommage spécifique à vos tests unitaires, ce que nous vous recommandons, la définition de cet espace de nommage dans chacune de vos classes de tests unitaires sera fastidieuse.
Nous vous recommandons donc de le définir une bonne fois pour toute dans une classe abstraite de la manière suivante :
<?php
namespace vendor\project\Tests\Units;
require_once __DIR__ . '/mageekguy.atoum.phar';
use mageekguy\atoum;
abstract class Test extends atoum\test
{
public function __construct(score $score = null, locale $locale = null, adapter $adapter = null)
{
$this->setTestNamespace('Tests\Units');
parent::__construct($score, $locale, $adapter);
}
}
?>
Ainsi, vous n'aurez plus qu'à faire dériver vos classes de tests unitaires de cette classe abstraite :
<?php
namespace vendor\project\Tests\Units\modules;
require_once __DIR__ . '/mageekguy.atoum.phar';
use mageekguy\atoum;
use vendor\project\Tests\Units;
class aModule extends Units\Test
{
public function testDoSomething()
{
/* ... */
}
}
?>
Cerise sur le gâteau, si vous décidez de modifier l'espace de nommage réservé à vos tests unitaires, vous n'aurez qu'une seule classe à modifier.
Attention, il était possible auparavant d'utiliser la méthode \mageekguy\atoum\test::setTestsSubNamespace()
, mais cette dernière est dépréciée en faveur de \mageekguy\atoum\test::setTestNamespace()
.