Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Phpunit Dataprovider可以从安装程序获取连接 通过安装程序()连接到数据库失败 连接到数据库本身的工作_Phpunit - Fatal编程技术网

Phpunit Dataprovider可以从安装程序获取连接 通过安装程序()连接到数据库失败 连接到数据库本身的工作

Phpunit Dataprovider可以从安装程序获取连接 通过安装程序()连接到数据库失败 连接到数据库本身的工作,phpunit,Phpunit,如果我通过数据提供程序通过setUp function连接数据库,它会响应致命错误:调用成员函数query(),但是如果连接到数据库本身工作,那么dataProvider能否获得setUp function的设置?这是通过设计实现的:为了确定测试的数量,PHPUnit在实际运行测试(和安装方法)之前运行数据提供程序 从: 注: 在调用setUpBeforeClass静态方法和第一次调用setUp方法之前,将执行所有数据提供程序。因此,您无法访问从数据提供程序中创建的任何变量。这是PHPUnit能

如果我通过数据提供程序通过
setUp function
连接数据库,它会响应
致命错误:调用成员函数query()
,但是如果连接到数据库本身工作,那么
dataProvider
能否获得
setUp function
的设置?

这是通过设计实现的:为了确定测试的数量,PHPUnit在实际运行测试(和安装方法)之前运行数据提供程序

从:

注: 在调用setUpBeforeClass静态方法和第一次调用setUp方法之前,将执行所有数据提供程序。因此,您无法访问从数据提供程序中创建的任何变量。这是PHPUnit能够计算测试总数所必需的


在您的情况下,我会对DB使用单例/实例模式。

尝试重写构造函数:

public function __construct($name = null, array $data = [], $dataName = '')
{
    $this->db = new Core\Database('unitest');
}

另一种方法是使用

public function test\u foo($var\u name){
变量转储(
self::${$var\u name}//这与'self:::$bar'相同。
);
}
公共功能数据_foo(){
返回数组(
排列(
'bar',//这是一个_字符串u,包含变量的_名称u,而不是变量本身。
),
);
}
数据提供程序传递变量的名称,测试函数使用该名称直接访问静态成员

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']);
        }
    }
}
public function __construct($name = null, array $data = [], $dataName = '')
{
    $this->db = new Core\Database('unitest');
}