一尘不染

PHPUnit模拟对象和静态方法

php

我正在寻找测试以下静态方法(特别是使用Doctrine模型)的最佳方法:

class Model_User extends Doctrine_Record
{
    public static function create($userData)
    {
        $newUser = new self();
        $newUser->fromArray($userData);
        $newUser->save();
    }
}

理想情况下,我将使用模拟对象来确保调用了“ fromArray”(具有提供的用户数据)和“ save”,但这是不可能的,因为该方法是静态的。

有什么建议么?


阅读 313

收藏
2020-05-29

共1个答案

一尘不染

PHPUnit的作者Sebastian Bergmann最近发表了一篇有关Stubbing和Mocking静态方法的博客文章。使用PHPUnit 3.5和PHP 5.3以及一致使用后期静态绑定,您可以

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

更新: staticExpects弃用的PHPUnit
3.8的
,将被更高版本的完全去除。

2020-05-29