Passing data provider to setUp() in PHPUnit

纵然是瞬间 提交于 2021-02-08 15:09:13

问题


I'm currently trying to pass data from my data provider to the setUp()-method in PHPUnit.

Background: I am using PHPUnit for running frontend-tests in different browsers. The browser should be defined inside the data provider and needs to be known by the setUp()-method.

I understand, that a data provider initially is executed before the setUp()-method (as setUpBeforeClass()) is called. Therefore setUp()-data can not be passed to a data provider. But it should work the other way round, shouldn't it?

Does PHPUnit generate its own temporarily testclasses with data from the data provider "integrated"?

Of course: a workaround could be, to read the XML-file in the setUp()-method again. But that's the last option, I'd consider...

EDIT: Provided a small snippet:

part of dataProvider():

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

And the setUp()-method:

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

回答1:


In case this is useful to anyone:

The following code should work:

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) {

}

The getProvidedData method seems to have been available since PHPUnit 5.6 (which was either shortly before or after this question was originally asked)




回答2:


we can make the xmlCnf to static

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();
}


来源:https://stackoverflow.com/questions/40397620/passing-data-provider-to-setup-in-phpunit

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!