PHPUnit 返回“数据集 #0 无效。” 与数据提供者

Gay*_*d.P 5 php phpunit

这个简单的类返回

1) 警告为 App\Tests\Twig\GenerateTokenTest::testGenerateToken 指定的数据提供程序无效。数据集#0 无效。

class GenerateTokenTest extends TestCase
{
    /**
     * @dataProvider provideToken
     */
    public function testGenerateToken(int $length): void
    {
        $token = GenerateToken::generate($length);

        $this->assertTrue(true);
    }

    public function provideToken(): iterable
    {
        yield 8;
        yield 16;
        yield 29;
    }
}
Run Code Online (Sandbox Code Playgroud)

你知道为什么吗 ?

Nic*_*ase 8

如果您使用 PhpUnit 的数据提供程序,他们希望在每次调用时返回一个数据数组。这个内部数组应该与您的测试方法的输入变量相匹配。因此,如果它具有单个参数$length,则数据提供程序应返回一个包含测试输入的数组,例如yield [8];

如果测试方法使用多个输入变量 - 您可能已经猜到了:数组应该包含更多值。例如,根据您的代码:

class GenerateTokenTest extends TestCase
{
    /**
     * @dataProvider provideToken
     */
    public function testGenerateToken(int $length, int $size): void
    {
        $token = GenerateToken::generate($length);

        $this->assertTrue(true);
    }

    public function provideToken(): iterable
    {
        yield [8, 9];
        yield [16, 17];
        yield [29, 30];
    }
}
Run Code Online (Sandbox Code Playgroud)