我正在尝试将数据从我的数据提供程序传递到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
//[...]
}
答案 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();
}