2

我刚刚开始了解 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 对象的类常量?或者,我在宏伟的计划中究竟错过了什么?

4

1 回答 1

1

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

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

如果db未定义类,则PHPUnit创建db类和db_2528522f(一些哈希)。所以新创建的类根本没有常量。

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

于 2013-11-12T04:53:18.523 回答