Xia*_* Li 5 php testing phpunit mockery
我想模拟一个静态方法,该方法已在使用Mokcery的另一种方法中使用,如下所示:
Class SomeClass
{
public static function methodA()
{
.....;
self::B();
}
public static function methodB()
{
Do SomeThing
}
}
Run Code Online (Sandbox Code Playgroud)
如果我想模拟方法B,并使用方法A,则模拟功能不起作用,仅因为方法B在方法A中使用,如下所示
use Mockery as m;
$mocktest = m::mock->('SomeClass[B]');
$mocktest->shouldReceive('B')->andReturn("expectedResult");
$mocktest->methodA();
Run Code Online (Sandbox Code Playgroud)
上面的代码将导致methodB仍返回其原始结果,而不是'expectedResult'。我希望方法A中使用的方法B被嘲笑,我该如何操作?
您需要使用别名来模拟静态方法:
$mock = \Mockery::mock('alias:SomeClass');
Run Code Online (Sandbox Code Playgroud)
请注意,该类尚无法加载。否则嘲讽将无法对其进行别名。
更多文档:
请注意,嘲笑静态方法不是一个好主意。如果您觉得有需要,则可以在设计上遇到问题。模拟正在测试的班级更糟,这表明您的班级职责太多。