使用TableGateway ZF2 / ZF3为类编写测试

时间:2017-05-25 19:02:19

标签: php zend-framework zend-framework2 phpunit

我在测试时遇到问题。

我在我的类中创建了一个计算数据库表中所有行的函数。要访问数据库,我使用Zend Frameworks TableGateway class。我的问题是,我不知道如何为该功能编写测试。

一种看待它的方法是,该功能非常简单,不需要测试,但知道如何使其工作会很好。

AbstractTableGateway上没有允许我设置内部变量$ adapter的函数。如何设置受保护的变量$ adapter?

功能

public function count()
{
    $sql = "SELECT COUNT(*) AS Count FROM ". $this->tableGateway->getTable();
    $statement = $this->tableGateway->adapter->query($sql);
    $result    = $statement->execute()->current();
    return $result['Count'];
}

测试功能

public function testCount()
{
    $sql = "SELECT COUNT(*) AS Count FROM DbTable";

    $result = $this->prophesize(Result::class);
    $result->current()->willReturn(["Count" => 10]);

    $statement = $this->prophesize(Statement::class);
    $statement->execute()->willReturn($result);

    $adapter = $this->prophesize(Adapter::class);
    $adapter->query($sql)->willReturn($statement);

    $this->tableGateway->adapter = $adapter;

    $this->assertSame(10, $this->DbTable->count());
}

1 个答案:

答案 0 :(得分:1)

TableGateway从构造函数中获取其适配器。无论工厂在TableGateway属性创建$this->tableGateway实例,都应该将模拟适配器(或真正的适配器,如果这是针对集成测试)传递给它的构造函数。