PHPUnit模拟对象和静态方法

PHPUnit模拟对象和静态方法

我正在寻找最好的方法来测试以下静态方法(具体使用一个Doctrine模型):

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

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

有什么建议么?

采纳答案:

PHPUnit的作者Sebastian Bergmann最近有一篇关于Stubbing和Mocking Static Methods的博客文章。 使用PHPUnit 3.5和PHP 5.3以及一致的使用后期静态绑定,您可以做到

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

更新: 从PHPUnit 3.8起 , staticExpects已被弃用 ,并将随后更新版本完全删除。

参考更多解答:PHPUnit模拟对象和静态方法,转载请保留PHPUnit模拟对象和静态方法

更多:doctrine