Estou tentando usar os dataProviders do PHPUnit 12 para fornecer dados a uma função para teste, mas não consigo fazer funcionar.
Aqui está meu teste de unidade (que fica em tests/TestTest.php
):
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;
final class TestTest extends TestCase
{
public static function dataProvider(): array
{
return [['a'], ['b']];
}
#[DataProvider("dataProvider")]
public function testTest($var): void
{
$this->assertTrue(true);
}
}
Quando corro, ./vendor/bin/phpunit tests
recebo isso:
PHPUnit 12.0.0 by Sebastian Bergmann and contributors.
Runtime: PHP 8.3.14
E 1 / 1 (100%)
Time: 00:00.019, Memory: 8.00 MB
There was 1 error:
1) TestTest::testTest
ArgumentCountError: Too few arguments to function TestTest::testTest(), 0 passed in C:\path\to\vendor\phpunit\phpunit\src\Framework\TestCase.php on line 1104 and exactly 1 expected
C:\path\to\tests\TestTest.php:12
ERRORS!
Tests: 1, Assertions: 0, Errors: 1.
Alguma ideia?
Duas coisas boas de saber:
O PHPUnit 10 passou a oferecer suporte aos Atributos do PHP 8. O PHPUnit 11 tornou obsoletas as antigas @annotations. O PHPUnit 12 removeu as @annotations.
Atributos PHP não devem ser implementados. Nesse caso, não podem ser instanciados. Portanto, usar um nome de classe inexistente em um #[ATTRIBUTE-NAME] simplesmente passará despercebido.
Como você está atribuindo por DataProvider("dataProvider") para provocar o diagnóstico
Isso mostra que o atributo não tem efeito. É um simples erro de digitação; o nome de classe correto da anotação @dataProvider anterior é PHPUnit\Framework\Attributes\DataProvider .
aplicam-se as regras de resolução de nomes de classes padrão, qualificam-se totalmente
ou pseudônimo, no seu caso
no início do segmento de namespace (às vezes implícito) é suficiente.
No PHPUnit 10+, você precisa:
Importe a classe de atributo ou
Use o nome totalmente qualificado (antigo
@dataProvider
docblock).Importar isto
Ou à moda antiga