在PHPUnit中使用间谍对象?
如何在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中的“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()方法不再存在。