Écrire des assertions PHPUnit plus simples grâce au VarDumper
Les tests unitaires sont une étape cruciale pour garantir la qualité de votre code, mais parfois, les répétitions peuvent devenir lassantes. Avez-vous déjà soupiré en enchaînant des appels à $this->assertXXX()…
Les tests unitaires sont une étape cruciale pour garantir la qualité de votre
code, mais parfois, les répétitions peuvent devenir lassantes. Avez-vous déjà soupiré en enchaînant des appels à $this->assertXXX()
pour valider des structures complexes ? Heureusement, il existe une solution élégante pour simplifier tout cela : le composant Symfony/VarDumper.
Voyons ensemble comment l'utiliser pour rendre vos tests plus concis et lisibles tout en conservant leur efficacité.
Un exemple concret
Imaginons que nous souhaitions tester certaines propriétés d’une classe comme celle-ci :
final readonly class MyObject
{
public function __construct(
public string $aPublicProperty = 'a public property',
protected string $aProtectedProperty = 'a protected property',
private string $aPrivateProperty = 'a private property',
public string $anotherPublicProperty = 'another public property',
protected string $anotherProtectedProperty = 'another protected property',
private string $anotherPrivateProperty = 'another private property',
) {}
}
Lorsque vous dumpez un objet instancié avec ses valeurs par défaut, voici le résultat obtenu :
PhpunitVarDumper\MyObject^ {#325
+aPublicProperty: "a public property"
#aProtectedProperty: "a protected property"
-aPrivateProperty: "a private property"
+anotherPublicProperty: "another public property"
#anotherProtectedProperty: "another protected property"
-anotherPrivateProperty: "another private property"
}
Simplifier les tests
Traditionnellement, on utiliserait plusieurs appels à $this->assertSame()
pour valider ces propriétés. Cependant, grâce à Symfony/VarDumper, nous pouvons alléger ce processus en utilisant une assertion sur le dump directement.
Commencez par installer le composant en mode développement :
composer require --dev symfony/var-dumper
Ensuite, importez le trait VarDumperTestTrait
et utilisez la méthode assertDumpEquals()
dans vos tests :
use PHPUnit\Framework\TestCase;
use PhpunitVarDumper\MyObject;
use Symfony\Component\VarDumper\Test\VarDumperTestTrait;
final class MyObjectTest extends TestCase
{
use VarDumperTestTrait;
public function test()
{
$myObject = new MyObject();
$this->assertDumpEquals(
<<<'DUMP'
PhpunitVarDumper\MyObject {
+aPublicProperty: "a public property"
#aProtectedProperty: "a protected property"
-aPrivateProperty: "a private property"
+anotherPublicProperty: "another public property"
#anotherProtectedProperty: "another protected property"
-anotherPrivateProperty: "another private property"
}
DUMP,
$myObject,
);
}
}
N’est-ce pas plus clair et élégant ?