模拟对象无法访问类常量

时间:2013-11-11 16:46:03

标签: php mocking phpunit

我刚刚开始了解PHPUnit&嘲笑的课程。我正在尝试测试一段从数据库对象获取查询对象的代码,然后从该查询中获取数据。所以我试图模拟这些数据库对象的功能,以便它们总是返回一组已知的数据。

我的客户端代码正在运行以下行:

    $result = $query->fetch(db::FETCH_ASSOC);

当我尝试运行测试时,我收到以下错误:Fatal error: Undefined class constant 'FETCH_ASSOC' in...... etc

创建模拟对象的测试中的代码如下:

    /** dbQuery Mock Object */
    $this->dbQuery = $this->getMock('dbQuery', array('execute', 'fetch' ), array(), '', false);

    $this->dbQuery->expects($this->any())
                  ->method('execute')
                  ->will($this->returnValue(null));

    $this->dbQuery->expects($this->any())
                  ->method('fetch')
                  ->will($this->returnValue(null));


    /** db Mock Object */
    $this->dbro = $this->getMock('db', array('prepare'), array(), '', false);
    $this->dbro->expects($this->once())
        ->method('prepare')
        ->will($this->returnValue($this->dbQuery));

所以我的问题是,如何访问模拟的db对象的类常量?或者,我在宏观计划中究竟错过了什么?

1 个答案:

答案 0 :(得分:1)

getMock可以根据不存在的类创建对象。在这种情况下,它将创建两个类。

$dbro = $this->getMock('db', array('prepare'), array(), '', false);

如果db类未定义PHPUnit创建db类和db_2528522f(某些哈希)。所以新创建的类根本没有任何功能。

您确定包含所有必需文件或自动加载是否正常工作?