使用带有PHPUnit和属性的单独数据提供程序类

icnyk63a  于 2023-02-11  发布在  PHP
关注(0)|答案(1)|浏览(107)

我想将测试和数据提供程序分开。使用PHP 8属性,当引用外部数据提供程序时,我无法运行以下测试:

#[Test]
#[DataProviderExternal(RouterDataProvider::class, 'registerGetRouteData')]
public function itRegistersGetRoute(Route $route, array $expectedResult)
{
    $this->router->get($route);
    $this->assertEquals($expectedResult, $this->router->getRoutes());
}

我的数据提供程序类:

class RouterDataProvider
{
    public static function registerGetRouteData(): array
    {
        return [
            $route = new Route('/', ['IndexController', 'index']),
            [
                'GET' => [
                    '/' => $route,
                ],
                'POST' => []
            ]
        ];
    }
}

我怎样才能让这个测试使用所需的provider方法运行呢?

dldeef67

dldeef671#

通过使用以下标志运行PHPUnit,我能够准确地看到问题所在:

./vendor/bin/phpunit --display-deprecations --display-warnings --diplay-errors --display-notices

数据集无效。将return更改为yield并将registerGetRouteData方法的返回类型从array更新为\Generator解决了此问题。
我运行的phpunit带有--testdox标志,所以我不确定这是否是我最初看到错误的原因,并假设测试被跳过了。

相关问题