PHPStan
PHPUnit
Diese Erweiterung bietet folgende Funktionen:
Die Methoden createMock()
, getMockForAbstractClass()
und getMockFromWsdl()
geben einen Schnittpunkttyp (siehe die ausführliche Erläuterung der Schnittpunkttypen) des Scheinobjekts und der Scheinklasse zurück, sodass beide Methoden vom Scheinobjekt (wie expects
“) und von der Scheinklasse stammen sind am Objekt vorhanden.
Der Aufruf von getMock()
auf MockBuilder
wird ebenfalls unterstützt.
Interpretiert Foo|PHPUnit_Framework_MockObject_MockObject
in phpDoc so, dass es zu einem Schnittpunkttyp anstelle eines Unionstyps führt.
Definiert früh beendende Methodenaufrufe für die PHPUnitFrameworkTestCase
-Klasse, um undefinierte Variablenfehler zu verhindern.
Gibt die Arten von Ausdrücken an, die an verschiedene assert
-Methoden übergeben werden, z. B. assertInstanceOf
, assertTrue
, „ assertInternalType
“ usw.
In Kombination mit PHPStans Level 4 weist es auf immer-wahre und immer-falsche Zusicherungen hin, wie zum Beispiel assertTrue(true)
usw.
Es enthält auch diese strengen Framework-spezifischen Regeln (separat aktivierbar):
Stellen Sie sicher, dass Sie assertSame()
nicht mit dem erwarteten Wert true
verwenden. Stattdessen sollte assertTrue()
verwendet werden.
Stellen Sie sicher, dass Sie assertSame()
nicht mit dem erwarteten Wert false
verwenden. Stattdessen sollte assertFalse()
verwendet werden.
Stellen Sie sicher, dass Sie assertSame()
nicht mit dem erwarteten Wert null
verwenden. Stattdessen sollte assertNull()
verwendet werden.
Stellen Sie sicher, dass assertSame()
nicht mit count($variable)
als zweitem Parameter verwenden. Stattdessen sollte assertCount($variable)
verwendet werden.
Wenn Sie den Mock konfigurieren müssen, auch nachdem Sie ihn einer Eigenschaft zugewiesen oder von einer Methode zurückgegeben haben, sollten Sie PHPUnit_Framework_MockObject_MockObject
zum phpDoc hinzufügen:
/** * @return Foo&PHPUnit_Framework_MockObject_MockObject */private function createFooMock() { return $this->createMock(Foo::class); }öffentliche Funktion testSomething() { $fooMock = $this->createFooMock(); $fooMock->method('doFoo')->will($this->returnValue('test')); $fooMock->doFoo(); }
Bitte beachten Sie, dass die korrekte Syntax für Schnittpunkttypen Foo&PHPUnit_Framework_MockObject_MockObject
ist. Foo|PHPUnit_Framework_MockObject_MockObject
wird ebenfalls unterstützt, jedoch nur aus Ökosystem- und Legacy-Gründen.
Wenn der Mock vollständig konfiguriert ist und nur die Methoden der Mock-Klasse für den Wert aufgerufen werden sollen, ist es in Ordnung, nur die Mock-Klasse zu typisieren:
/** @var Foo */private $foo;protected function setUp() { $fooMock = $this->createMock(Foo::class); $fooMock->method('doFoo')->will($this->returnValue('test')); $this->foo = $fooMock; }öffentliche Funktion testSomething() { $this->foo->doFoo(); // $this->foo->method() und Expects() können nicht mehr aufgerufen werden}
Um diese Erweiterung verwenden zu können, benötigen Sie sie in Composer:
composer require --dev phpstan/phpstan-phpunit
Wenn Sie auch phpstan/extension-installer installieren, sind Sie startklar!
Wenn Sie phpstan/extension-installer
nicht verwenden möchten, fügen Sie extension.neon in die PHPStan-Konfiguration Ihres Projekts ein:
includes: - vendor/phpstan/phpstan-phpunit/extension.neon
Um Framework-spezifische Prüfungen durchzuführen, schließen Sie auch diese Datei ein:
- vendor/phpstan/phpstan-phpunit/rules.neon