PHPStan
Unidade PHP
Esta extensão oferece os seguintes recursos:
Os métodos createMock()
, getMockForAbstractClass()
e getMockFromWsdl()
retornam um tipo de interseção (veja a explicação detalhada dos tipos de interseção) do objeto simulado e da classe simulada para que ambos os métodos do objeto simulado (como expects
) e da classe simulada estão disponíveis no objeto.
getMock()
chamado no MockBuilder
também é suportado.
Interpreta Foo|PHPUnit_Framework_MockObject_MockObject
em phpDoc para que resulte em um tipo de interseção em vez de um tipo de união.
Define chamadas de método de encerramento antecipado para a classe PHPUnitFrameworkTestCase
para evitar erros de variáveis indefinidas.
Especifica tipos de expressões passadas para vários métodos assert
como assertInstanceOf
, assertTrue
, assertInternalType
etc.
Combinado com o nível 4 do PHPStan, ele aponta afirmações sempre verdadeiras e sempre falsas como assertTrue(true)
etc.
Ele também contém estas regras estritas específicas da estrutura (podem ser habilitadas separadamente):
Verifique se você não está usando assertSame()
com true
como valor esperado. assertTrue()
deve ser usado em seu lugar.
Verifique se você não está usando assertSame()
com false
como valor esperado. assertFalse()
deve ser usado em seu lugar.
Verifique se você não está usando assertSame()
com null
como valor esperado. assertNull()
deve ser usado em seu lugar.
Verifique se você não está usando assertSame()
com count($variable)
como segundo parâmetro. assertCount($variable)
deve ser usado em seu lugar.
Se você precisar configurar o mock mesmo depois de atribuí-lo a uma propriedade ou retorná-lo de um método, você deve adicionar PHPUnit_Framework_MockObject_MockObject
ao phpDoc:
/** * @return Foo&PHPUnit_Framework_MockObject_MockObject */função privada createFooMock() { return $this->createMock(Foo::class); }função pública testSomething() { $fooMock = $this->createFooMock(); $fooMock->method('doFoo')->will($this->returnValue('test')); $fooMock->doFoo(); }
Observe que a sintaxe correta para tipos de interseção é Foo&PHPUnit_Framework_MockObject_MockObject
. Foo|PHPUnit_Framework_MockObject_MockObject
também é suportado, mas apenas por motivos de ecossistema e legado.
Se a simulação estiver totalmente configurada e apenas os métodos da classe simulada devem ser chamados no valor, não há problema em digitar apenas a classe simulada:
/** @var Foo */private $foo;configuração de função protegida() { $fooMock = $this->createMock(Foo::class); $fooMock->method('doFoo')->will($this->returnValue('test')); $this->foo = $fooMock; }função pública testSomething() { $this->foo->doFoo(); // $this->foo->method() e expects() não podem mais ser chamados}
Para usar esta extensão, solicite-a no Composer:
composer require --dev phpstan/phpstan-phpunit
Se você também instalar o phpstan/extension-installer, estará tudo pronto!
Se você não quiser usar phpstan/extension-installer
, inclua extension.neon na configuração do PHPStan do seu projeto:
includes: - vendor/phpstan/phpstan-phpunit/extension.neon
Para realizar verificações específicas da estrutura, inclua também este arquivo:
- vendor/phpstan/phpstan-phpunit/rules.neon