PHPStan
PHPUnit
Cette extension offre les fonctionnalités suivantes :
Les méthodes createMock()
, getMockForAbstractClass()
et getMockFromWsdl()
renvoient un type d'intersection (voir l'explication détaillée des types d'intersection) de l'objet fictif et de la classe simulée afin que les deux méthodes de l'objet fictif (comme expects
) et de la classe simulée sont disponibles sur l'objet.
getMock()
appelé sur MockBuilder
est également pris en charge.
Interprète Foo|PHPUnit_Framework_MockObject_MockObject
dans phpDoc afin qu'il en résulte un type d'intersection au lieu d'un type d'union.
Définit les appels de méthode de fin anticipée pour la classe PHPUnitFrameworkTestCase
afin d'éviter les erreurs de variables non définies.
Spécifie les types d'expressions transmises à diverses méthodes assert
comme assertInstanceOf
, assertTrue
, assertInternalType
etc.
Combiné avec le niveau 4 de PHPStan, il indique les assertions toujours vraies et toujours fausses comme assertTrue(true)
etc.
Il contient également ces règles strictes spécifiques au framework (peuvent être activées séparément) :
Vérifiez que vous n'utilisez pas assertSame()
avec true
comme valeur attendue. assertTrue()
doit être utilisé à la place.
Vérifiez que vous n'utilisez pas assertSame()
avec false
comme valeur attendue. assertFalse()
doit être utilisé à la place.
Vérifiez que vous n'utilisez pas assertSame()
avec null
comme valeur attendue. assertNull()
doit être utilisé à la place.
Vérifiez que vous n'utilisez pas assertSame()
avec count($variable)
comme deuxième paramètre. assertCount($variable)
doit être utilisé à la place.
Si vous devez configurer le mock même après l'avoir attribué à une propriété ou l'avoir renvoyé à partir d'une méthode, vous devez ajouter PHPUnit_Framework_MockObject_MockObject
au phpDoc :
/** * @return Foo&PHPUnit_Framework_MockObject_MockObject */private function createFooMock() { return $this->createMock(Foo::class); }fonction publique testQuelque chose() { $fooMock = $this->createFooMock(); $fooMock->method('doFoo')->will($this->returnValue('test')); $fooMock->doFoo(); }
Veuillez noter que la syntaxe correcte pour les types d'intersection est Foo&PHPUnit_Framework_MockObject_MockObject
. Foo|PHPUnit_Framework_MockObject_MockObject
est également pris en charge, mais uniquement pour des raisons d'écosystème et d'héritage.
Si la classe simulée est entièrement configurée et que seules les méthodes de la classe simulée sont censées être appelées sur la valeur, vous pouvez taper uniquement la classe simulée :
/** @var Foo */private $foo;protected function setUp() { $fooMock = $this->createMock(Foo::class); $fooMock->method('doFoo')->will($this->returnValue('test')); $this->foo = $fooMock; }fonction publique testQuelque chose() { $this->foo->doFoo(); // $this->foo->method() et Expects() ne peuvent plus être appelés}
Pour utiliser cette extension, exigez-la dans Composer :
composer require --dev phpstan/phpstan-phpunit
Si vous installez également phpstan/extension-installer, alors vous êtes prêt !
Si vous ne souhaitez pas utiliser phpstan/extension-installer
, incluez extension.neon dans la configuration PHPStan de votre projet :
includes: - vendor/phpstan/phpstan-phpunit/extension.neon
Pour effectuer des vérifications spécifiques au framework, incluez également ce fichier :
- vendor/phpstan/phpstan-phpunit/rules.neon