如何使用PHPUnit测试静态函数调用

时间:2014-04-15 19:26:56

标签: php symfony static mocking phpunit

例如,我如何测试Symfony createFromGlobals类中的静态Request方法?

我看到了这个例子,但它只适用于调用者和被调用者属于同一个类时。

$class::staticExpects($this->any())
      ->method('helper')
      ->will($this->returnValue('bar'));

执行此操作的首选方法是什么。 Mockery的一个例子也可以。 他们在没有示例的情况下讨论类别名模拟。

1 个答案:

答案 0 :(得分:1)

如果您在代码中使用静态调用,那么根据静态调用实际执行的操作,您会遇到困难。嘲笑它是不可能的。

根据您的工作情况,您甚至可能不想嘲笑它。例如,如果您正在测试控制器,则不需要模拟它。通过任何方法发布适当的方法(GET,POST等)并创建请求对象。仅替换系统外部的任何服务(数据库等),并确保您的响应正确。这个测试严格来说不是一个"单位"测试但显示所有课程都在一起正常工作。

如果您正在创建,则某个模型中的此对象会更改设计,以便传入Request对象。然后,您可以创建具有正确行为的mockRequest,而无需尝试模拟静态方法调用。