gpt4 book ai didi

phpunit - 模拟时如何确保方法存在于真实对象中?

转载 作者:行者123 更新时间:2023-12-04 04:57:37 24 4
gpt4 key购买 nike

如果我使用 Mockery 模拟接口(interface)并将 shouldReceive 与不存在的方法一起使用,我希望我的测试失败。环顾四周没有帮助。

例如 :

带接口(interface):

interface AInterface {
public function foo();
public function bar();
}

和一个测试用例:
function testWhatever{
Mockery::mock('AInterface')->shouldReceive('bar');
$this->assertTrue(true);
}

测试将通过。

现在,重构时间,bar 方法在一个地方不需要(假设它在多个地方都需要)并且从接口(interface)定义中被抑制,但测试仍然会通过。我希望它失败。

是否可以使用 mock 来做这样的事情(并且能够用类而不是接口(interface)做同样的事情)?
或者是否存在使用其他工具或测试方法的解决方法?

不确定是否可以按原样理解,如果需要,将尝试对问题进行更清晰的描述。

最佳答案

为确保 Mockery 不允许您模拟不存在的方法,请将以下代码放入您的 PHPUnit 引导文件(如果您希望 所有 测试具有此行为):

\Mockery::getConfiguration()->allowMockingNonExistentMethods(false);

如果您只希望特定测试用例的这种行为,请将代码放在 setUp() 中。该测试用例的方法。

查看 this section of the Mockery manual on Github了解更多信息。

关于phpunit - 模拟时如何确保方法存在于真实对象中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16570522/

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