通过setUp()连接数据库失败
class ChanTest extends PHPUnit_Framework_TestCase
{
protected $db;
protected function setUp()
{
$this->db = new Core\Database('unitest');
}
/**
* @dataProvider testProvider
*/
public function testData($a, $b, $c)
{
$this->assertEquals($a + $b, $c);
}
public function testProvider()
{
$this->db->query('SELECT `a`, `b`, `c` FROM `units`');
return $this->db->rows();
}
}
连接到数据库本身就可以工作
class ChanTest extends PHPUnit_Framework_TestCase
{
protected $db;
protected function setUp()
{
$this->db = new Core\Database('unitest');
}
public function testData($a, $b, $c)
{
$this->db->query('SELECT `a`, `b`, `c` FROM `units`');
foreach ($this->db->rows() as $item) {
$this->assertEquals($item['a'] + $item['b'], $item['c']);
}
}
}
如果我通过 dataProvider 连接数据库setUp function
,它响应Fatal error: Call to a member function query()
,但是如果连接到数据库本身有效,则可以dataProvider
得到setUp function
的设置?
这是设计使然:为了确定测试的数量,PHPUnit 在实际运行测试(以及 setUp 方法)之前运行 dataProviders。
来自数据提供者手册 https://phpunit.de/manual/current/en/writing-tests-for-phpunit.html#writing-tests-for-phpunit.data-providers:
笔记:
所有数据提供程序都在调用 setUpBeforeClass 静态方法和第一次调用 setUp 方法之前执行。因此,您无法访问从数据提供程序中创建的任何变量。这是 PHPUnit 能够计算测试总数所必需的。
在您的情况下,我将使用数据库的单例/实例模式。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)