PHPUnit使用dataProvider时返回“数据集#0无效。”

6

这个简单的类返回:

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

你知道为什么吗?

1
你尝试过返回一个数组而不是单个整数吗? - Nico Haase
没关系,数组我不太理解,但没关系,谢谢 :) - Gaylord.P
1个回答

11

如果您在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];
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接