Menu
Navigation
Accueil
À propos
À propos de moi
Contact
Me contacter
Suivez moi :
2011-09-13

Comment tester un Trait avec phpUnit ?

Share on Twitter Share on LinkedIn
TL;DR (IA)
  • Tester un Trait PHP peut être compliqué car il nécessite une classe pour l’implémenter.
  • PHPUnit facilite cela avec la méthode getObjectForTrait(), permettant de tester directement le comportement du Trait.
  • Découvrez comment écrire des tests unitaires précis et fiables pour vos Traits, et gagnez en qualité de code.
Résumé généré par IA pour vous aider à survoler l’article.

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 :

© Jean-François Lépine, 2010 - 2025