Beim Spotten einer Schnittstelle in PHPUnit beschwert sich PhpStorm, wenn es als Parameter für eine typisierte Funktion verwendet wird.
Beispiel
%Vor% On $a->foo($mock);
PhpStorm unterstreicht $mock
mit der Warnung Expected InterfaceA, got PHPUnit_Framework_MockObject_MockObject
Bild
Ich schätze, es passiert, weil PHPUnit die Laufzeitumgebung simuliert und PhpStorm nicht wissen kann, dass es tatsächlich die Schnittstelle implementiert.
Ich habe im Jetbrain-Blog unter eine Umgehungsmöglichkeit für dieses Problem gefunden PhpStorm Type Inference und Mocking Frameworks . Der wichtige Teil:
Standardmäßig kann PhpStorm die verfügbaren Methoden ermitteln auf dem Mock-Objekt. Es zeigt jedoch nur solche für PHPUnit an PHPUnit_Framework_MockObject_MockObject-Klasse. Zum Glück können wir es löse dies, indem du PhpStorm anweist, Informationen über den Typ zu erhalten andere Klassen, indem Sie einen einfachen Docblock-Kommentar verwenden.
Um die Warnung verschwinden zu lassen, müssen wir /** @var InterfaceA */
/** @var InterfaceA|PHPUnit_Framework_MockObject_MockObject */
(an Supericy) hinzufügen, um PhpStorm mitzuteilen, dass unser Mock tatsächlich InterfaceA
implementiert:
Das nervte mich für einige Zeit, hoffe es hilft jemandem:)
Bearbeiten
Da PHPUnit_Framework_MockObject_MockObject
sehr hässlich zu tippen ist, können Sie es über MOOMOO
abkürzen und PHPStorms automatisch vervollständige den Rest:
Tags und Links unit-testing php phpunit phpstorm type-hinting