2011-02-07 13 views
6

Jak mogę użyć obiektu szpiegującego w PHPUnit? Możesz wywoływać obiekt naśladując i po tym, jak możesz potwierdzić, ile razy on zadzwonił. To jest Szpieg.Korzystanie z obiektu szpiegującego w PHPUnit?

Znam "Makiety" w PHPUnit jako obiekt pośredni i makiety obiektu.

+0

Co robi * "Możesz nazywać obiekt naśladując" * znaczy? * "ile razy nazwa" * ... masz na myśli * "została nazwana" *? – netcoder

Odpowiedz

9

Można stwierdzić, ile razy Mock został wywołany z PHPUnit robiąc

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

Gdy następnie wywołać coś w TestSubject która wywołuje Mock, PHPUnit nie powiedzie się test, gdy SomeClass SomeMethod nie nazwano pięć razy z argumentami foo, bar, baz. Istnieje liczba additional matchers besides exactly.

Ponadto do utworzenia testu podwójnego od wersji 4.5 należy PHPUnit as has built-in support for using Prophecy. Więcej informacji na temat tworzenia, konfigurowania i używania kodów pośredniczących, szpiegów i makiet można znaleźć w tej alternatywnej podwójnej strukturze testowej.

4

Jest szpiegiem powrócił z $this->any(), można go używać coś takiego:

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

kładę się wpis w blogu na ten temat na pewnym etapie: http://blog.lyte.id.au/2014/03/01/spying-with-phpunit/

mam pojęcia, gdzie (jeśli?) jest to udokumentowane, znalazłem to przeszukując kod PHPUnit ...

+0

Czy to tylko ja, czy [to już nie ma miejsca] (https://github.com/sebastianbergmann/phpunit/blob/60c32c5b5e79c2248001efa2560f831da11cc2d7/src/Framework/TestCase.php#L1898-L1901)? –

+1

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

Powiązane problemy