getObjectForTrait(), permettant de tester directement le comportement du Trait.Il peut être intéressant de tester un code avec des Traits, PHP et phpUnit. Les Traits sont apparus en PHP 5.4, et permettent de définir des comportements qui peuvent être réutilisés dans plusieurs classes.
Lors de mes premiers tests, je me suis vite rendu compte d’un problème : pour pouvoir tester un trait, c’est à dire un comportement, il faut une classe qui implémente ce comportement :
trait MyBehavior {
public function getAny()
{
return 'ok';
}
}
class Example {
use MyBehavior;
}
Et le test :
class BehaviorTest extends PHPUnit\Framework\TestCase {
public function testMyBehavior()
{
$behavior = new Example;
$this->assertEquals('ok', $behavior->getAny());
}
}
Or ici on voit bien l’erreur : on ne test pas unitairement le comportement du Trait, mais son implémentation dans une classe qui est sujette à modifications.
C’est ici qu’intervient PHPUnit, qui a introduit la méthode getObjectForTrait() dans sa version 3.6.
Grâce à cette méthode, il est possible de tester directement notre comportement.
trait MyBehavior {
public function getAny()
{
return 'ok';
}
}
et le test :
class BehaviorTest extends PHPUnit\Framework\TestCase {
public function testMyBehavior()
{
$behavior = $this->getObjectForTrait('MyBehavior');
$this->assertEquals('ok', $behavior->getAny());
}
}
Pratique non ?
💡 Pour aller plus loin :
- PHPUnit, le framework de test unitaire pour PHP.
- Les traits en PHP, la documentation officielle.
- Les traits en PHP, conférence que j’ai donnée à l’AFUP.
OctoFirst
Voyez où votre équipe coince
Le projet sur lequel je bosse en ce moment. Vos pull requests en disent déjà long : où l'équipe se grippe, comment l'activité se répartit entre bugs, features et refacto. OctoFirst en fait des signaux clairs, sans reporting à faire à la main.
Y jeter un œil, c'est gratuit
Audit & Formation
Disponible sur Malt
Besoin d'un regard extérieur sur votre code ? J'accompagne les équipes PHP sur l'architecture, les tests et l'industrialisation, au rythme de vos projets.
Me trouver sur Malt© Jean-François Lépine, 2010 - 2026 · Flux RSS