【问题标题】:Passing data provider to setUp() in PHPUnit将数据提供者传递给 PHPUnit 中的 setUp()
【发布时间】:2017-03-16 19:24:30
【问题描述】:

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

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

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

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

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

编辑:提供了一个小sn-p:

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
    //[...]
}

【问题讨论】:

    标签: phpunit


    【解决方案1】:

    如果这对任何人有用:

    以下代码应该可以工作:

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

    getProvidedData 方法似乎从 PHPUnit 5.6 开始可用(最初是在提出这个问题之前或之后不久)

    【讨论】:

    • 我正在努力完成这项工作,但我的班级有 2 个数据提供者。为了在你的代码中做同样的事情,我需要一个特定的 dataProvider 方法吗?
    【解决方案2】:

    我们可以将 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();
    }
    

    【讨论】:

    • 不幸的是,当我尝试访问父类中的静态变量时,结果仍然是 NULL。除了将其作为参数传递之外,还有其他方法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-21
    • 1970-01-01
    • 2020-07-13
    • 2023-01-09
    • 2014-11-19
    相关资源
    最近更新 更多