php:使用“Mockery”来模拟在另一个静态方法中调用的静态方法

时间:2016-03-10 08:16:23

标签: php testing phpunit mockery

我想模拟一个静态方法,该方法已在另一个使用Mokcery的方法中使用,如下所示:

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

如果我想模拟methodB,并使用methodA,则mock函数不起作用,因为methodB在methodA中使用,如下所示

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

上面的代码将导致methodB仍然返回它的原始结果而不是'expectedResult'。 我希望方法A中使用的methodB被模拟,我该怎么操作?

1 个答案:

答案 0 :(得分:4)

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

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

请注意,类尚未加载。否则嘲弄就无法使其成为别名。

更多文档:

请注意,模拟静态方法不是一个好主意。如果你觉得你需要它,你就会遇到设计问题。 嘲笑你正在测试的课程更糟糕,并且表明你的班级有太多责任。