DataProvider作为结果集,在PHPUnit中具有迭代


DataProvider as Result set with iterate in PHPUnit

我已经创建了带有使用@dataProvider的测试函数的PHPUnit测试。类似这样的东西:

/**
 * @dataProvider getData
 */
public function testData($id, $name, $data) {
    ...
    $this->assertTrue(...);    
}
public function getData() {
    $query = "SELECT * FROM <table_name>";
    $sth = $this->_db->prepare($query);
    $sth->execute();
    return $sth->fetchAll(PDO::FETCH_ASSOC);
}
// -------------------------------------------------------------------
// EDIT
// same thing is happening if I return just $sth object as result.
// It's first iterate on each record to collect the all data and after run test func. For example :
public function getData() {
    $query = "SELECT * FROM <table_name>";
    $sth = $this->_db->prepare($query);
    $sth->execute();
    return $sth;
}

当测试终止时,这在某种程度上运行良好。这种方法存在内存问题,因为这是在测试开始之前加载整个结果集,并且它一直保持在内存中。

PHPUnit中是否有对数据库结果集和游标迭代(fetch)的内置支持?或者我应该删除@dataProvider并从测试函数内的结果集中获取数据吗?我正在使用PHPUnit vesrion 4.8.15

感谢

您能给出控制台响应吗?当你使用时

    /**
     * @return type
    */
    public function getData()
    {...}

你应该这样称呼它:

/**
* @dataProvider getData
*/
public function testData($fixtures)
{
    $x->someFunction($fixtures['exampleAdress'];
}

但如果我看到错误或更多关于你的代码,我会帮助你更多,是ORM还是不是等等…

@编辑:

内存不足:phpunit -d memory_limit=128Mphp -d memory_limit=<memory>M -r "echo ini_get('memory_limit);"