2011-02-07 9 views
6

Come posso utilizzare Spy Object in PHPUnit? Puoi chiamare l'oggetto in imitazione, e dopo puoi dire quante volte ha chiamato. È Spia.Utilizzo di oggetti spia in PHPUnit?

Conosco "Mock" in PHPUnit come oggetto Stub e Oggetto Mock.

+0

che cosa significa * "Puoi chiamare oggetto a imitazione su" * significa? * "quante volte ha chiamato" * ... vuoi dire * "è stato chiamato" *? – netcoder

risposta

9

È possibile affermare quante volte un Mock è stato richiamato con PHPUnit quando si fa

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

Quando si quindi chiamare qualcosa nel TestSubject che richiama il Mock, PHPUnit fallirà la prova quando SomeClass someMethod non è stato chiamato a cinque tempi con argomenti foo, bar, baz. C'è un numero di additional matchers besides exactly.

Inoltre, PHPUnit as has built-in support for using Prophecy per creare doppie di test dalla versione 4.5. Si prega di fare riferimento allo documentation for Prophecy per ulteriori dettagli su come creare, configurare e utilizzare stub, spie e mock usando questo doppio framework di test alternativo.

4

C'è una spia tornato da $this->any(), si può usare qualcosa di simile:

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

ho messo su un blog su questo a un certo punto: http://blog.lyte.id.au/2014/03/01/spying-with-phpunit/

Non ho idea di dove (se?) è documentato, ho trovato la ricerca attraverso il codice PHPUnit ...

+0

Sono solo io o [è questo non è più il caso] (https://github.com/sebastianbergmann/phpunit/blob/60c32c5b5e79c2248001efa2560f831da11cc2d7/src/Framework/TestCase.php#L1898-L1901)? –

+1

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

Problemi correlati