2
respostas

Solução: Data Provider ...\AvaliadorTest::gerarLeiloes() is not static

Estou fazendo o curso com a versão 10 do PHPUnit. Acompanhando o código do curso, me deparo com o seguinte erro:

Data Provider method Alura\Leilao\Tests\Service\AvaliadorTest::gerarLeiloes() is not static

Buscando uma solução, cheguei na seguinte adaptação:

public static function gerarLeiloes() 
    {
        $avaliadorTest = new AvaliadorTest("AvaliadorTest"); //O método construtor da classe TestCase requer um parâmetro $nome para instanciar a classe AvaliadorTest.

        return [
            [$avaliadorTest->leilaoEmOrdemCrescente()],
            [$avaliadorTest->leilaoEmOrdemDecrescente()],
            [$avaliadorTest->leilaoEmOrdemAleatoria()]
        ];
    }

Assim o teste funciona sem a exibição do aviso de Deprecation.

Esta é a solução mais correta ou existe outra forma mais elegante de utilizar o método?

2 respostas

Olá, Giulivan! Tudo joia?

A solução que você encontrou, de tornar o método gerarLeiloes() estático, é uma forma válida de resolver o problema. Podem até existir outras formas mais elegantes de utilizar o método como um Data Provider. Contudo, o mais importante é que você buscou a solução para o seu problema e a encontrou da sua forma.

Espero que continue assim, isso mostra o seu comprometimento com os seus estudos.

E caso durante os seus estudos você tenha problemas, pode recorrer ao fórum! Contamos com uma grande comunidade que pode lhe ajudar.

Bons estudos!

Fiz de outra maneira sem instanciar um objeto AvalidadorTest(), porém tive que definir o metodo entregaLeiloes() como estático e todos os outros que são retornados dentro dele. Funcionou!

public static function leilaoEmOrdemCrescente() {}
public static function leilaoEmOrdemDecrescente() {}
public static function leilaoEmOrdemAleatoria() {}

public static function entregaLeiloes() 
{
    return [
        [self::leilaoEmOrdemCrescente()],
        [self::leilaoEmOrdemDecrescente()],
        [self::leilaoEmOrdemAleatoria()],
    ];
}