来自谷歌模拟的背景,我很惊讶这不起作用,除非我做错了。
我只想确保使用特定类类型调用永远方法,但可以为其他类类型调用。所以这里有我解释我想要的代码:
$this->entityManagerMock
->expects($this->any())
->method('persist');
$this->entityManagerMock
->expects($this->never())
->method('persist')
->with($this->isInstanceOf('MySpecificClass'));
现在我收到类似的消息:
Doctrine\ORM\EntityManager::persist(DifferentClassType Object (...)) was not expected to be called.
当我期望第一次期望处理它时。
我试过了,但结果是一样的:
$this->entityManagerMock
->expects($this->any())
->method('persist')
->with($this->anything());
$this->entityManagerMock
->expects($this->never())
->method('persist')
->with($this->isInstanceOf('MySpecificClass'));
这是我第一次在PHPUnit中使用模拟,但在我看来with
已被破坏和/或没用。我知道现在大多数Web开发人员都使用TDD,所以必须有更好的方法来实现这一点。
答案 0 :(得分:2)
作为解决方法,您可以使用returnCallback
:
$this->entityManagerMock
->expects($this->any())
->method('persist')
->will($this->returnCallback(function ($object) {
self::assertNotInstanceOf('MySpecificClass', $object);
}));