2011-02-07 12 views
6

¿Cómo puedo usar el objeto Spy en PHPUnit? Puede invocar el objeto en imitación, y luego puede afirmar cuántas veces llamó. Es espía.¿Cómo usar el objeto Spy en PHPUnit?

Sé "simulacro" en PHPUnit como Objeto auxiliar y Objeto simulado.

+0

¿Qué significa * "Puedes llamar a objeto en imitación en" * significa? * "cuántas veces se llamó" * ... quieres decir * "ha sido llamado" *? – netcoder

Respuesta

9

Puede afirmarse cuántas veces al Mock fue llamado con PHPUnit cuando se hace

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

Cuando a continuación, llama a algo en el TestSubject que invoca el Mock, PHPUnit fallará la prueba cuando SomeClass algunMetodo no fue llamado de cinco veces con argumentos foo, bar, baz. Hay un número de additional matchers besides exactly.

Además, PHPUnit as has built-in support for using Prophecy para crear dobles de prueba desde la versión 4.5. Consulte el documentation for Prophecy para obtener más información sobre cómo crear, configurar y usar stubs, espías y burlas utilizando este framework doble de prueba alternativo.

4

Hay un espía de regresar de $this->any(), puede utilizar algo como:

$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]); 

que poner una entrada de blog acerca de esto en algún momento: http://blog.lyte.id.au/2014/03/01/spying-with-phpunit/

no tengo ni idea de dónde (si?) está documentado, lo encontré buscando a través del código PHPUnit ...

+0

¿Soy yo o [ya no es el caso] (https://github.com/sebastianbergmann/phpunit/blob/60c32c5b5e79c2248001efa2560f831da11cc2d7/src/Framework/TestCase.php#L1898-L1901)? –

+1

Acuerdo https://github.com/sebastianbergmann/phpunit/issues/2326 – lyte