我想使用 Mokcery 模拟一个已在另一个方法中使用的静态方法,如下所示:
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');
注意该类还无法加载。不然嘲讽就无法别名了。
文档中的更多内容:
- 模拟公共静态方法 http://docs.mockery.io/en/latest/reference/public_static_properties.html
- 快速参考 http://docs.mockery.io/en/latest/reference/startup_methods.html
请注意,模拟静态方法不是一个好主意。如果您觉得需要它,那么您的设计就有问题。
嘲笑你正在测试的类更糟糕,这表明你的类有太多的责任。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)