在PHPUnit中将数据提供程序传递给setUp()

时间:2016-11-03 09:14:23

标签: phpunit

我正在尝试将数据从我的数据提供程序传递到PHPUnit中的setUp()方法。

背景:我使用PHPUnit在不同的浏览器中运行前端测试。浏览器应该在数据提供者内部定义,并且需要由setUp() - 方法知道。

据我所知,数据提供程序最初是在调用setUp() - 方法(如setUpBeforeClass())之前执行的。因此setUp() - 数据无法传递给数据提供者。但它应该反过来,不应该吗?

PHPUnit是否使用数据提供程序中的数据“集成”生成自己的临时测试类?

当然:解决方法可能是再次读取setUp()方法中的XML文件。但那是最后一个选择,我会考虑......

编辑:提供了一个小代码段:

dataProvider()的一部分:

public function dataProvider()
{
    $this->xmlCnf = $data['config'];
    var_dump($this->xmlCnf); // array with config is exposed
    // [...]
}

setUp() - 方法:

 protected function setUp()
{
    var_dump($this->xmlCnf); // NULL
    //[...]
}

2 个答案:

答案 0 :(得分:2)

如果这对任何人都有用:

以下代码应该有效:

public function dataProvider()
{
    return [ [ /* dataset 1 */] , ... ]
}

protected setUp() {
    parent::setUp();
    $arguments = $this->getProvidedData();
    // $arguments should match the provided arguments for this test case
}

/** 
 * @dataProvider dataProvider
 */
public function testCase(...$arguments) {

}

自PHPUnit 5.6(在最初询问此问题之前或之后不久),getProvidedData方法似乎已经可用了。

答案 1 :(得分:1)

我们可以使xmlCnf变为静态

private static $xmlCnf;

public function provider(){
    self::$xmlCnf = 'hello';
    var_dump(self::$xmlCnf); //hello
    return [...];
}

public function setUp() {
    var_dump(self::$xmlCnf); //hello
    parent::setUp();
}