首页 > 解决方案 > 将 dataProviders 数据传递给设置 [PHPUnit]

问题描述

我第一次尝试让 PHPUnit 工作;我想将数据传递给 TestCasesetUp()方法,以便我可以为每个测试创建一个新实例。当我写...

protected $furniture;

/**
* Instantiate an instance of Furniture for use with all test methods not involved with class constructor objectives
* @dataProvider validConstructorArgumentProvider
*/
protected function setUp($sku, $name, $price, $dimensions) : void
{
    $this->furniture = new Furniture($sku, $name, $price, $dimensions);

}

在我上课的开始,然后测试运行错误:

ArgumentCountError: Too few arguments to function WebApp\tests\FurnitureTest::setUp(), 0 passed in /Users/ScottAnderson/Documents/Tech/commissions/shopping_app_test/vendor/phpunit/phpunit/src/Framework/TestCase.php on line 1024 and exactly 4 expected

我已经注意到这一点

所有数据提供者都在调用 setUpBeforeClass() 静态方法和第一次调用 setUp() 方法之前执行。因此,您无法从数据提供者中访问您在那里创建的任何变量。为了使 PHPUnit 能够计算测试的总数,这是必需的。

我指定的数据提供者如下所示:

private function validConstructorArgumentProvider()
{
    return [
        ["TBL11FN", "Table", 60.0, [120, 50, 70]],
        ["CBN33FN", "Cabinet", 70.0, [60, 120, 210]],
        ["DSK5FN", "Desk", 55.0, [180, 70, 70]],
        ["PCT102FN", "Picture Frame", 13.0, [60, 40, 4]],
        ["LMP40FN", "Lamp Shade", 9.0, [40, 40, 25]]
    ];
}

...所以也许无法将 dataProvider 参数提供给setUp(),但在这种情况下,我真的不明白每个测试方法设置函数的意义是什么。是否可以将参数从 dataProvider 传递给`setUp()?

注意:我已经看到了这个,但我已经按照最喜欢的答案的步骤进行操作,但我仍然没有任何运气

标签: phptestingphpunit

解决方案


无法将数据从数据提供者传递到setUp().


推荐阅读