gpt4 book ai didi

php - 使用 Mockery 模拟在另一个静态方法中调用的静态方法

转载 作者:可可西里 更新时间:2023-10-31 23:02:37 25 4
gpt4 key购买 nike

我想使用Mokcery mock一个已经在另一个方法中使用过的静态方法,如下:

Class SomeClass
{
public static function methodA()
{
.....;
self::B();
}
public static function methodB()
{
Do SomeThing
}
}

如果我想模拟方法B,并使用方法A,模拟功能不起作用,只是因为方法B在方法A中使用,如下所示

 use Mockery as m;
$mocktest = m::mock->('SomeClass[B]');
$mocktest->shouldReceive('B')->andReturn("expectedResult");
$mocktest->methodA();

上面的代码将导致 methodB 仍然返回它的原始结果而不是“expectedResult”。我期望methodA中使用的methodB被mock了,怎么操作?

最佳答案

您需要使用别名来模拟静态方法:

$mock = \Mockery::mock('alias:SomeClass');

请注意,类还不能加载。否则 mockery 将无法为其取别名。

文档中的更多内容:

请注意,模拟静态方法不是一个好主意。如果您觉得自己需要它,那么您的设计就有问题。模拟您正在测试的类(class)更糟糕,这表明您的类(class)有太多责任。

关于php - 使用 Mockery 模拟在另一个静态方法中调用的静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35910961/

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