gpt4 book ai didi

mocking - PHPUnit 模拟多重期望

转载 作者:行者123 更新时间:2023-12-02 17:19:18 26 4
gpt4 key购买 nike

来自 Google Mock 的背景,我很惊讶这不起作用,除非我做错了。

我只是想确保永远不会使用特定类类型调用某个方法,但可以为其他类类型调用该方法。所以这是我的代码,它解释了我想要的内容:

$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,因此必须有更好的方法来做到这一点。

最佳答案

作为解决方法,您可以使用 returnCallback :

$this->entityManagerMock
->expects($this->any())
->method('persist')
->will($this->returnCallback(function ($object) {
self::assertNotInstanceOf('MySpecificClass', $object);
}));

关于mocking - PHPUnit 模拟多重期望,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10184440/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com