7
votes

Utiliser un objet espion dans PHPUNIT?

Comment puis-je utiliser l'objet espion chez Phpunit? Vous pouvez appeler objet dans l'imitation et après avoir affirmé combien de fois cela a appelé. C'est espion.

Je connais "maquette" en phpunit comme objet stub et objet simulé.


1 commentaires

Qu'est-ce que "Vous pouvez appeler objet dans l'imitation sur" signifie? "Combien de fois cela s'appelle" ... tu veux dire "a été appelé" ?


3 Réponses :


11
votes

Vous pouvez affirmer combien de fois une maquette a été convoquée avec PHPUnit lors du fait de

    $mock = $this->getMock('SomeClass');
    $mock->expects($this->exactly(5))
         ->method('someMethod')
         ->with(
             $this->equalTo('foo'), // arg1
             $this->equalTo('bar'), // arg2
             $this->equalTo('baz')  // arg3
         );


1 commentaires

J'ai donc besoin de passer une semaine à apprendre à apprendre une nouvelle nouvelle framework toplande pour pouvoir utiliser la pleine puissance du code (plutôt que très pauvre de la merde prédéfinie) pour affirmer des arguments à une méthode surbect?



7
votes

Il y a un espion retourné de $ ceci-> tout () code>, vous pouvez l'utiliser quelque chose comme:

$foo->expects($spy = $this->any())->method('bar');
$foo->bar('baz');

$invocations = $spy->getInvocations();

$this->assertEquals(1, count($invocations));
$args = $invocations[0]->arguments;
$this->assertEquals(1, count($args));
$this->assertEquals('bar', $args[0]);


2 commentaires

Est-ce juste moi ou est ce plus le cas ?


À partir de 8.4.1, les tests échouent comme méthode GetInvocations () n'existent plus. Github.com/sebastianbergmann/phpunit/issues/3888



0
votes

Une mise à jour des réponses de @ Lyte fonctionnant en 2018:

$foo->expects($spy = $this->any())->method('bar');
$foo->bar('baz');

$invocations = $spy->getInvocations();

$this->assertEquals(1, count($invocations));
$args = $invocations[0]->getParameters();
$this->assertEquals(1, count($args));
$this->assertEquals('bar', $args[0]);


0 commentaires