Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHPUnit中使用间谍对象?_Php_Phpunit_Spy - Fatal编程技术网

在PHPUnit中使用间谍对象?

在PHPUnit中使用间谍对象?,php,phpunit,spy,Php,Phpunit,Spy,如何在PHPUnit中使用间谍对象? 您可以在上调用模仿中的对象,然后可以断言它调用了多少次。 这是间谍 我知道PHPUnit中的“Mock”是存根对象和Mock对象。您可以断言在执行此操作时使用PHPUnit调用Mock的次数 $mock = $this->getMock('SomeClass'); $mock->expects($this->exactly(5)) ->method('someMethod') -&g

如何在PHPUnit中使用间谍对象? 您可以在上调用模仿中的对象,然后可以断言它调用了多少次。 这是间谍


我知道PHPUnit中的“Mock”是存根对象和Mock对象。

您可以断言在执行此操作时使用PHPUnit调用Mock的次数

    $mock = $this->getMock('SomeClass');
    $mock->expects($this->exactly(5))
         ->method('someMethod')
         ->with(
             $this->equalTo('foo'), // arg1
             $this->equalTo('bar'), // arg2
             $this->equalTo('baz')  // arg3
         );
然后,当您在调用Mock的TestSubject中调用某个对象时,当SomeClass someMethod未使用参数foo、bar、baz调用五次时,PHPUnit将使测试失败。这里有很多


此外,从版本4.5开始创建测试加倍。有关如何使用此替代测试框架创建、配置和使用存根、间谍和模拟的更多详细信息,请参阅

有一个间谍从
$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]);
我在某个阶段写了一篇关于这一点的博客:


我不知道在哪里(如果?)有记录,我在PHPUnit代码中找到了它…

2018年@lyte答案的更新:

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

“你可以在模仿中调用对象”是什么意思?“它叫了多少次”。。。你的意思是“已被调用”?是我还是?从8.4.1开始,测试失败,因为getInvocations()方法不再存在。