PHPUnit : les mocks

Publié le par vincent

On ne présente plus PHPUnit, cet excellent outil permettant de piloter les tests de vos applications. Mais connaissez-vous vraiment sa puissance ? Accrochez-vous à votre slip, ça décoiffe !

PHPUnit : les mocks

Lorsque l’on développe des outils génériques, il est primordial de tester son code. Il devient cependant compliqué de tester certains objets, par exemple les entités Mapped Superclasses : comment tester une classe abstraite ou une interface ?

PHPUnit propose une solution que l’on retrouve dans beaucoup d’autres languages de programmation : le Mock. Il ne s’agit pas de la dernière insulte dans les cités (Espèce de mock !), ni de la dernière tendance vestimentaire (Jean-Paul Gaultier présente sa nouvelle création : le mock), mais d’un simulateur d’objets irréels depuis des signatures réelles.

Encore des mots compliqués tout ça…
Mais non, c’est pourtant simple : PHPUnit va créer un objet dans une classe qui n’existe pas, mais qui étend de la classe/interface que vous souhaitez tester :)

Supposons que vous disposez de 2 entités : l’une abstraite, l’autre réelle possédant une dépendance vers cette première. Afin de tester votre entité réelle, vous allez avoir besoin d’injecter l’entité abstraite à travers un mock, comme suit :

public function testMock()
{
$realObject = new RealObject($this->getMock('\Path\To\Abstract\Object'));
$this->assertNotNull($realObject->getMyAbstractObject());
$this->assertNull($realObject->getMyAbstractObject()->getProperty());
}

Magique non ? :) La méthode getMock permet de simuler un objet de votre classe abstraite, dont chaque méthode va retourner NULL. Mais attendez, ce n’est pas tout ! Voyons maintenant comment tester notre classe abstraite, sans remplacer chaque retour de méthode par NULL.

public function testMockForAbstractClass()
{
$mock = $this->getMockForAbstractClass('\Path\To\Abstract\Object');
$this->assertNotNull($mock->getProperty());
}

La force des mocks, maintenant tu maîtrises, jeune padawan !

La force des mocks, maintenant tu maîtrise, jeune padawan

Cette entrée a été publiée dans PHPUnit, Symfony 2 Utils, avec comme mot(s)-clef(s) , , , , . Vous pouvez la mettre en favoris avec ce permalien.



Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*


2 * seven =

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>