DataProvider as Result在PHPUnit中使用iterate设置

时间:2015-10-28 10:54:19

标签: php phpunit

我已使用PHPUnit的测试功能创建了@dataProvider测试。像这样:

/**
 * @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中为db结果集和游标迭代(fetch)构建支持?或者我应该从测试函数中的结果集中删除@dataProvider获取数据?我正在使用PHPUnit vesrion 4.8.15

由于

1 个答案:

答案 0 :(得分:0)

你能给出控制台回复吗?当你使用

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

您应该这样称呼它:

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

但是如果我看到错误或更多关于您的代码的话,我会帮助您更多,是ORM还是没有......等等。

@EDIT:

内存不足: phpunit -d memory_limit=128M 要么 php -d memory_limit=<memory>M -r "echo ini_get('memory_limit);&#34;