Dataprovider可以从setUp获取连接

Cha*_*han 11 phpunit

通过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();
    }
}
Run Code Online (Sandbox Code Playgroud)

连接到数据库本身工作

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']);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我通过dataProvider连接数据库setUp function,它会响应Fatal error: Call to a member function query(),但如果连接数据库本身有效,可以dataProvider得到setUp function设置吗?

Mel*_*lle 15

这是设计的:为了确定测试的数量,PHPUnit在实际运行测试(和setUp方法)之前运行dataProviders.

DataProviders上手册:

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

在你的情况下,我会为数据库使用单例/实例模式.