我已经创建了带有使用@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=128M
或php -d memory_limit=<memory>M -r "echo ini_get('memory_limit
);"