2011-02-07 5 views
6

Как использовать объект Spy в PHPUnit? Вы можете вызвать объект в подражание, и после того, как вы сможете утверждать, сколько раз он вызывал. Это шпион.Использование объекта Spy в PHPUnit?

Я знаю «Mock» в PHPUnit как объект-заглушка и макет объекта.

+0

Что означает * «Вы можете называть объект в подражание« * »? * «сколько раз он назывался» * ... вы имеете в виду * «был вызван» *? – netcoder

ответ

9

Вы можете утверждать, сколько раз Мок был вызван с помощью PHPUnit при выполнении

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

Когда вы затем вызвать что-то в TestSubject, который вызывает Mock, PHPUnit провалит тест, когда SomeClass SomeMethod не называло пять раз с аргументами foo, bar, baz. Существует номер additional matchers besides exactly.

Кроме того, PHPUnit as has built-in support for using Prophecy для создания тестовых парных номеров с версии 4.5. Пожалуйста, обратитесь к documentation for Prophecy за дополнительной информацией о том, как создавать, настраивать и использовать заглушки, шпионы и издевки, используя эту альтернативную тестовую двойную структуру.

4

Там шпион вернулся из $this->any(), вы можете использовать что-то вроде:

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

Я терплю запись в блоге об этом на каком-то этапе: http://blog.lyte.id.au/2014/03/01/spying-with-phpunit/

Я понятия не имею, где (если?), это документировано, я нашел, что он просматривает код PHPUnit ...

+0

Это только я или [это уже не так) (https://github.com/sebastianbergmann/phpunit/blob/60c32c5b5e79c2248001efa2560f831da11cc2d7/src/Framework/TestCase.php#L1898-L1901)? –

+1

Согласовано https://github.com/sebastianbergmann/phpunit/issues/2326 – lyte

Смежные вопросы