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


Use Mockery to mock a static method called in another static method

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

Class SomeClass
{
   public static function methodA()
   {
     .....;
     self::B();
   } 
   public static function methodB()
   {
     Do SomeThing
   }
}
如果我想模拟方法B,

并使用方法A,则模拟函数不起作用,只是因为方法A中使用了方法B,如下所示

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

上面的代码将导致methodB仍然返回其原始结果,而不是"预期结果"。我希望方法A中使用的方法B被模拟,我该如何操作?

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

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

请注意,尚无法加载类。否则嘲弄将无法将其别名化。

文档中的更多内容:

  • 模拟公共静态方法
  • 快速参考

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